WordPress. Убираем лишние миниатюры

17.03.2019

Теги: CMSWeb-разработка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

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.