Как отключить генерацию размеров изображений по умолчанию для некоторых пользовательских типов записей?

12

Я использовал пользовательский тип записи, где «миниатюра», «средний» и «большой» размер не требуются. Мне нужно отключить эти размеры и создать функцию или плагин, где я могу установить, какой размер изображения требуется для каждого пользовательского типа сообщения.

Мой первый шаг - подключение функции get_intermediate_image_sizes из wp-includes / media.php. Я добавил этот код в functions.php, но он не работает :(

add_filter('get_intermediate_image_sizes', 'get_intermediate_image_sizes_fixed');
function get_intermediate_image_sizes_fixed() {
    global $_wp_additional_image_sizes;
    //$image_sizes = array('thumbnail', 'medium', 'large'); // Standard sizes
    $image_sizes = array();
    if ( isset( $_wp_additional_image_sizes ) && count( $_wp_additional_image_sizes ) )
        $image_sizes = array_merge( $image_sizes, array_keys( $_wp_additional_image_sizes ) );
return apply_filters( 'intermediate_image_sizes', $image_sizes );
}   

UPD: редактирование этой строки в media.php работает. Типы по умолчанию после изменений не генерируются.

$image_sizes = array('thumbnail', 'medium', 'large');

Но как заставить мой крюк работать?

Богдан Хдал
источник
1
хотел бы получить ответ и на это
urok93
2
Это не то, как вы используете этот фильтр. Чтобы очистить размеры по умолчанию, вам просто нужно добавить его с очень низким приоритетом и вернуть пустой массив. Однако это не решит вашу проблему, потому что это повлияет на все типы сообщений. Я не думаю, что есть способ сделать то, что вы хотите в текущей версии WP. Попробуйте запросить WP devs добавить $attachment_idаргумент в фильтр внутри этой функции. Таким образом, вы можете проверить тип сообщения в вашем хуке
onetrickpony
Мой шаг - только эксперимент, но не полное решение. Как я могу использовать фильтр правильно? PS Спасибо за ссылку ..
Богдан Хдаль
Какие-нибудь изменения в WP, которые делают это возможным сейчас?
Drivingralle
Без изменений. Все та же проблема.
Богдан Хдал

Ответы:

7

Я думаю, что единственное решение, которое у вас есть на данный момент, это отключение всех промежуточных размеров изображения:

add_filter( 'intermediate_image_sizes', '__return_empty_array', 99 );

А затем вручную сгенерируйте их, в зависимости от типа записи, подключившись к 'wp_generate_attachment_metadata', где у вас есть доступ к идентификатору вложения (и, следовательно, к его родительскому сообщению):

function do_your_stuff( $data, $attachment_id ) {
  // generate intermediate images

  return $data;
}

add_filter( 'wp_generate_attachment_metadata', 'do_your_stuff', 10, 2 );
scribu
источник
Какие параметры 10 & 2 вы передаете в последний add_filter?
Люк