видалити або оновити add_image_size


16

Я працюю над темою, яка має кілька розмірів зображень, визначених правильно, використовуючи:

add_image_size( 'name', 500, 200, true );

Я хотів би змінити такі визначені розміри з дочірньої теми:

add_image_size( 'new-name', 400, 300, true );

Я знаю, що можу додати нові розміри, але якщо я додам те саме ім'я, тобто:

add_image_size( 'name', 400, 300, true );

Тоді використовується виклик батьківської функції - дочірнє ігнорується - додавання додаткових правил додає додаткові зображення, які ніколи не будуть використані - це не так вже й погано, але це не ефективно.

Чи є функція відписати доданий розмір зображення?

Ура!

Промінь


Чи можете ви опублікувати весь відповідний код? Чи add_image_size()дзвінки просто сидять голі functions.php, або вони належним чином загорнені всередині зворотного дзвінка, і підключені after_setup_theme? Знаючи, що важливо для відповіді на ваше запитання.
Чіп Беннетт

привіт чіп - дякую за ваш коментар - ви маєте рацію, що він загорнутий у after_setup_theme - так що це знову щодо пріоритетів - я це завжди сумую!
Q Studio

Відповіді:


22

Ця add_image_size( $name, $width, $height, $crop )функція є достатньо витонченою для обробки декількох дзвінків, використовуючи однакові $name. Він просто перезаписує існуюче значення :

$_wp_additional_image_sizes[$name] = array( 'width' => absint( $width ), 'height' => absint( $height ), 'crop' => (bool) $crop );

Отже, це означає, що все, що вам потрібно зробити, щоб змінити визначення батьківської теми Темою на спеціальний розмір зображення - це забезпечити, щоб ваш виклик add_image_size()спрацьовував після виклику батьківської теми .

Якщо припустити, що батьківська тема робить так:

function parent_theme_setup() {
    add_image_size( 'name', 500, 200, true );
    add_image_size( 'new-name', 400, 300, true );
}
add_action( 'after_setup_theme', 'parent_theme_setup' );

Потім add_image_size()виклик батьківської Теми спрацьовує на after_setup_themeгачок, за пріоритетом за замовчуванням (тобто 10).

(Примітка. Якщо виклики не завернуті у зворотний дзвінок, вони запускаються на plugins_loadedгачок, у пріоритеті 10.)

Ось найважливіша частина: файл дочірньої теми functions.phpрозбирається перед батьківською Темою , тому якщо ви використовуєте ті самі гачки для add_image_size()виклику ваших дзвінків, вони будуть перекрито add_image_size()викликами батьківської теми .

Рішення полягає в тому, щоб використовувати пізніший гачок або нижчий пріоритет , щоб гарантувати, що add_image_size()виклик Теми дитини починається після батьківської Теми.

Це має зробити трюк, незалежно від того, як батьківська Тема виконує свої дзвінки:

function child_theme_setup() {
    add_image_size( 'name', 400, 300, true );
}
add_action( 'after_setup_theme', 'child_theme_setup', 11 );

Зверніть увагу , що ми використовуємо один і той же after_setup_themeгачок, але використовувати більш низький пріоритет (тобто 11замість 10. Callbacks вогонь в порядку від вищого пріоритету (нижній номер) , щоб знизити пріоритет (вище число), починаючи з пріоритетом 0. Таким чином , зворотний виклик навішується пріоритет 11буде стріляти після того, як зворотний виклик, підключений до пріоритету 10.

Слід також зазначити , що after_setup_themeсам гачок спрацьовує після того, як на plugins_loadedгачок, так що цей зворотний виклик буде по- , як і раніше перевизначити батьківську тему, навіть якщо батьківська тема є _doing_it_wrong(), чи не обертати таких викликів у відповідній функції зворотного виклику, гачками в відповідний гачок.


відмінно - дякую чіп! - Я мав їх обох з одним і тим же пріоритетом - відрізав дитину після батька і все працювало нормально.
Q Studio

Я не можу переписати значення, якщо плагін викликає add_image_size :(
Zhianc

1

Якщо хтось хоче просто зняти додаткові розміри зображення, на відміну від зміни розмірів, використовуйте remove_image_size (рядок $ name) , наприклад

function pinboard_child_theme_setup( $sizes) {

    $image_size_names = array('thumbnail', 'medium', 'large',
        'slider-thumb', 'blog-thumb', 'teaser-thumb', 'gallery-1-thumb',
        'gallery-2-thumb', 'gallery-3-thumb', 'image-thumb', 'video-thumb');

    $image_size_names_length = count($image_size_names);
    for($x = 0; $x < $image_size_names_length; $x++) {
        remove_image_size($image_size_names[$x]);
    }   
}
add_action( 'after_setup_theme', 'pinboard_child_theme_setup', 11);

-1

У вашій чилійській темі вам потрібно було б користуватися add_action( 'after_setup_theme','new-name');


new-name тут - це назва функції або те, що коли-небудь ви використовуєте для своєї основної функції
Робін

Додайте пояснення до своєї відповіді: чому і як це вирішує проблему? Зауважте, що new-nameце недійсне ім'я зворотного дзвінка.
фуксія

"new-name" - це просто ручка доданого розміру зображення.
Q Studio
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.