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_h
medium_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