Как предотвратить генерацию WordPress изображений среднего размера 768px при загрузке?

9 янв. 2017 г., 06:29:19
Просмотры: 17.5K
Голосов: 17

Я предотвращаю генерацию WordPress размеров изображений thumbnail, medium и large для загружаемых в медиатеку изображений, устанавливая их размеры в 0 через панель управления: Настройки -> Медиафайлы.

Я также удалил все вызовы функций add_image_size и set_post_thumbnail_size из файла functions.php моей темы.

Однако при загрузке новых изображений WordPress всё равно создаёт версию шириной 768px (называемую 'medium_large') из оригинального изображения. Я полагаю, это связано с этим обновлением.

Есть ли способ полностью отключить эту функцию?

3
Комментарии

Вы понимаете, что WordPress делает это для снижения нагрузки на сервер и ускорения вашего сайта, верно?

Kenneth Odle Kenneth Odle
20 июн. 2017 г. 04:52:27

Вы правы. Размер изображения medium_large появился в WordPress 4.4 вместе с функцией адаптивных изображений. Он имеет фиксированную ширину 768 пикселей и пропорциональную высоту. Это жёстко закодировано в WordPress, в отличие от других стандартных размеров изображений. Я тоже удаляю его, однако WordPress и другие темы могут полагаться на наличие этого размера изображения для корректной работы. Имейте это в виду, если вам когда-нибудь понадобится временно переключиться на стандартную тему WordPress для отладки или при тестировании новых тем. Если размер не был сгенерирован при загрузке изображения, другие темы не будут автоматически генерировать его при необходимости.

SherylHohman SherylHohman
30 июн. 2020 г. 16:27:04
Все ответы на вопрос 3
1
21

Чтобы удалить размер изображения medium_large, вы можете попробовать убрать его с помощью фильтра intermediate_image_sizes:

add_filter( 'intermediate_image_sizes', function( $sizes )
{
    return array_filter( $sizes, function( $val )
    {
        return 'medium_large' !== $val; // Исключаем 'medium_large'
    } );
} );

Если вы пытаетесь удалить все промежуточные размеры, то можно использовать такой вариант:

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

где __return_empty_array() — это встроенная функция ядра WordPress.

Стоит отметить, что удалить этот размер с помощью

remove_image_size( 'medium_large' );

не получится, потому что он не добавляется через add_image_size() и, следовательно, не является частью глобального массива $_wp_additional_image_sizes или функции wp_get_additional_image_sizes().

9 янв. 2017 г. 11:49:40
Комментарии

да, также можно изменить опцию medium_large_size_w на 0, но мы не можем сделать это через /wp-admin/options.php, потому что там, кажется, есть проблема с нулевым значением (это как раз то, что я попробовал сначала, перед тем как написать ответ ;-), поэтому нам нужно установить это через Settings API или вручную в таблице wp_options.

birgire birgire
9 янв. 2017 г. 12:57:28
0
10

Удаление размера изображения таким же способом, как это делает ядро WordPress:

add_filter('intermediate_image_sizes', function($sizes) {
    return array_diff($sizes, ['medium_large']);
});

Имейте в виду, что medium_large обычно является хорошим размером для использования в srcset, удаляйте его только если вы понимаете, как работает srcset, и если у вас уже есть аналогичные размеры.

5 июн. 2018 г. 12:55:06
1

это будет работать


function paulund_remove_default_image_sizes( $sizes) {
    unset( $sizes['medium_large']);
    return $sizes;
}
add_filter('intermediate_image_sizes_advanced','paulund_remove_default_image_sizes');

https://developer.wordpress.org/reference/hooks/intermediate_image_sizes_advanced/

20 июн. 2017 г. 04:07:10
Комментарии

Хотя это не создало само изображение, оно создало запись в массиве вложений, то есть фальшивую запись с 769x в конце URL. Использование стандартного фильтра intermediate_image_sizes позволило избежать создания изображения и не показывать запись о нём в массиве.

lowtechsun lowtechsun
9 мар. 2018 г. 03:20:53