WordPress. Убираем лишние миниатюры
17.03.2019
Теги: CMS • Web-разработка • WordPress • Изображение • Файл
По умолчанию, WordPress генерирует четыре размера для каждой загружаемой картинки. Темы и плагины могут создавать дополнительные размеры изображений. Таким образом, сайт может создавать от 5 до 10 копий для каждого загружаемого изображения. Хорошо, когда все эти копии нужны и используются в теме, однако по факту этого происходит редко.
Чтобы для поста можно было задать миниатюру, нужно активировать эту возможность в файле темы funсtions.php:
add_theme_support('post-thumbnails', array('post')); set_post_thumbnail_size(200, 200, true);
Вызов функции set_post_thumbnail_size() зарегистрирует еще один размер миниатюры с идентификатором post-thumbnail. Что такое идентификатор размера миниатюры, см. ниже.
Получить массив идентификаторов всех промежуточных размеров картинок можно с помощью функции
$sizes = get_intermediate_image_sizes(); print_r($sizes);
Array
(
[0] => thumbnail
[1] => medium
[2] => medium_large
[3] => large
[4] => post-thumbnail
)
Копии, которые создает WordPress
По умолчанию WordPress создает четыре копии с идентификаторами размера
- миниатюра — идентификатор размера
thumbnail - средний размер — идентификатор размера
medium - средний-большой — идентификатор размера
medium_large - большой размер — идентификатор размера
large
Отключить создание копий большого и среднего размера можно на странице «Настройки • Медиафайлы». Для этого достаточно выставить нулевые значения высоты и ширины:
- Средний размер
- Макс.ширина — 0
- Макс.высота — 0
- Крупный размер
- Макс.ширина — 0
- Макс.высота — 0
Отключить создание копии «средний-большой» можно на скрытой странице настроек /wp-admin/options.php. Для этого нужно задать нулевые значения для
medium_large_size_hmedium_large_size_w
thumbnail (миниатюра) не рекомендуется отключать, потому что этот размер используется в стандартной галерее и в медиа-библиотеке панели управления.
Копии, которые создает тема
Обычно код темы, отвечающий за генерацию дополнительных размеров, можно найти в файле functions.php. Следует искать функцию
add_image_size('homepage-thumb', 1024, 768, true);
Функция add_image_size()
add_image_size($name, $width, $height, $crop);
Регистрирует новый размер картинки (миниатюры). При загрузке изображения, кроме базовых размеров, будет создаваться еще один файл с указанными размерами.
$name(строка). Идентификатор нового размера картинок.$width(число). Ширина миниатюры (в пикселях).$height(число). Высота миниатюры (в пикселях).$crop(логический). Кадрировать изображение? По умолчаниюfalse.
Также за создание копий может отвечать функция set_post_thumbnail_size(), которая регистрирует еще один размер миниатюры с идентификатором post-thumbnail.
set_post_thumbnail_size(200, 200, true);
Если закомментировать вызов этих двух функций, то и миниатюры заданных размеров создаваться не будут.
Программное отключение лишних миниатюр
Это можно сделать с помощью функции remove_image_size(), которая удаляет указанный размер миниатюры, созданные ранее с помощью add_image_size(). Для этого добавляем в файл темы function.php следующий код:
add_action( 'after_setup_theme', function () { remove_image_size('post-thumbnail'); }, 999 );
Как нетрудно догадаться, remove_image_size() не может удалять стандартные размеры миниатюр thumbnail, medium, medium_large и large. Но вместо этого можно вклиниться в процесс загрузки изображения. И сообщить WordPress, что существует меньше зарегистрированных размеров миниатюр, чем есть на самом деле:
// Этот код сообщает WordPress, что размеров medium, medium_large и large не // существует — в момент, когда картинка загружается на сайт в папку uploads add_filter( 'intermediate_image_sizes_advanced', function ($sizes) { // размеры миниатюр, которые не нужно создавать unset($sizes['medium']); unset($sizes['medium_large']); unset($sizes['large']); return $sizes; } );
Кроме того, в момент вызова функции get_intermediate_image_sizes(), мы можем сообщить вызывающему коду, что «лишних» размеров не существует (хотя это не так):
// Этот вариант более полный, потому что он выключает размеры // при каждом вызове функции get_intermediate_image_sizes() add_filter( 'intermediate_image_sizes', function ($sizes) { return array_diff( $sizes, // размеры миниатюр, которые не нужно создавать array( 'medium', 'medium_large', 'large' ) ); } );
Поиск: CMS • PHP • Web-разработка • WordPress • Изображение • Файл • Миниатюра • Thumbnail Медиа • add_theme_support • set_post_thumbnail_size • get_intermediate_image_sizes • add_image_size • remove_image_size