Убираем генерацию лишних изображений в WordPress

По умолчанию, WordPress генерирует 3 размера так называемых «миниатюр» для каждой оригинальной картинки, которую мы загружаем. Точнее, если уж совсем строго говорить — три размера генерируются, если исходная картинка достаточно велика (больше этих миниатюр хотя бы по одному размерению, по ширине или по высоте). Если же картинка невелика сама по себе — соответствующая миниатюра не генерируется ввиду ненужности.

Смысл создания миниатюр — ускорить работу сайта и сократить пересылаемый трафик, снизить нагрузку на сервер, за счет того, что в ряде случаев вместо полной картинки используется ее уменьшенная копия (миниатюра). Кроме того, поскольку миниатюры могут принудительно обрезаться в фиксированный размер — их использование удобно для единообразия в отображении сайта.

И всё бы ничего, но темы и плагины могут создавать дополнительные миниатюры — таких размеров и пропорций, которые нужны для этих тем и плагинов. Таким образом, ваш сайт может создавать от 5 до 10 копий (различного размера) из каждого загружаемого изображения. Это может увеличить необходимое пространство на диске и размер бэкапа файлов — а сервер не резиновый. И ладно бы, если бы все эти копии были бы нужны и использовались в теме, однако так происходит далеко не всегда, и даже когда происходит — вполне можно сэкономить.

Заметка: для отображения картинок в загрузчике медиафайлов WordPress при добавлении картинки к посту, используются средние размеры (medium). Поэтому я рекомендую их оставлять, можно просто размер сделать поменьше. Или наоборот — объединить их размер с более крупным (large). Дело в том, что если у вас зарегистрированные размеры совпадают — для них создается одна общая копия картинки.

По умолчанию WordPress создает 3 копии: миниатюру (thumbnail), средний размер (medium), большой размер (large). Кроме этих размеров тема может создавать дополнительные размеры. Например, для установки миниатюры поста, для постов в боковой панели или для других целей. Прежде всего, вам нужно определить сколько копий создается при загрузке изображения. Для этого зайдите в админ панель и загрузите изображение большого размера, пусть это будет картинка 1500х1000 пикселей (большой размер нужен для того, чтобы были созданы все возможные копии). Затем, подключитесь по FTP и зайдите в каталог куда загружаются изображения (обычно это: /wp-content/uploads/). В этом каталоге файлы сортируются по годам и месяцам, зайдите в последний год и месяц, там вы должны увидеть файл, который только что загрузили, и его копии всех размеров.

Чтобы отключить генерацию копий large по умолчанию, зайдите в Настройки > Медиафайлы и поставьте ноль ширины и высоты для крупного размера.

«Размер миниатюры» и «средний» рекомендую оставить, потому что эти размеры используются при создании стандартной галереи и в превью загруженных файлов в админ-панели. Если убрать эти размеры, то стандартная галерея не будет работать как положено. А превьюшки загруженных файлов в админ-панели будут загружаться долго, т.к. WP будет грузить оригиналы картинок.

#1 Отключение в коде

Остальные копии создаются темой. Обычно код темы, отвечающий за генерацию дополнительных размеров, можно найти в файле functions.php. Ищите размеры картинок, которые вы видели, зайдя в папку Download через FTP (например, вы там видели картинки шириной 672, 1038, 576 пикселов — вот такие цифры и ищите поиском) и функцию add_image_size(). Выглядеть она будет примерно так:

add_image_size( 'homepage-thumb', 1038, 576, true );

Удалите или закомментируйте эту строку, так вы отключите генерацию размера 1038х576.

Также за создание копий может отвечать функция set_post_thumbnail_size(), выглядит она так:

set_post_thumbnail_size( 150, 150 );

Её также нужно удалить или закомментировать.

Характерный пример такого хака «по-живому» для темы Hueman — правим в init-core.php секцию размеров вот в такой вид:

// Thumbnail sizes
add_image_size( 'thumb-small', 160, 160, true );
add_image_size( 'thumb-standard', 520, 245, true );
add_image_size( 'thumb-medium', 520, 245, true );
add_image_size( 'thumb-large', 720, 340, true );
add_image_size( 'small', 160, 160, true );
add_image_size( 'medium', 520, 245, true );
add_image_size( 'large', 720, 340, true );

Идея банальна — все 7 зарегистрированных размеров работают, но в реальности создаются только файлы размеров 160×160, 520×245 и 720×340, причем все с принудительной обрезкой в размер, без обрезки остается только оригинал. А если в Imsanity поставить ширину оригиналов картинок 720 — то в ряде случаев и размер 720×340 тоже не будет создаваться.

Фокус тут в том, что в вордпрессе функция add_image_size, вызванная для уже существующего названия миниатюры — переписывает ее параметры. И только если миниатюры с таким названием нет — то она создается.

#2 Удаление зарегистрированных размеров через фильтр

В версии WordPress 3.9. появились специальная функция, позволяющая удалить ненужные миниатюры: remove_image_size(). Теперь, вместо удаления строк, можно отключить ненужные размеры, добавив фильтр в файл functions.php:

function remove_plugin_image_sizes() {
remove_image_size('image-name');
}
add_action('after_setup_theme', 'remove_plugin_image_sizes', 999);

Тут ‘image-name’ название размера (‘homepage-thumb’ из примера выше). Удаление вешается на событие after_setup_theme, обычно этого события достаточно. 999 означает что приоритет выполнения функции удаления, поздний, т.е. функция будет вызвана после всех остальных во время этого события.

#3 Отключение создания доп. размеров через фильтр

Этот вариант может стать спасением, когда никакой другой не подходит. Он не отключает регистрацию самих размеров, а просто выключает, создание указанных копий изображений в папке uploads.

// отключаем создание миниатюр файлов для указанных размеров
add_filter( 'intermediate_image_sizes_advanced', function( $sizes ) {
unset( $sizes['blog-large'] );
unset( $sizes['blog-medium'] );
unset( $sizes['tabs-img'] );
unset( $sizes['related-img'] );
unset( $sizes['portfolio-full'] );
return $sizes;
} );

В этом коде названия: ‘blog-large’, ‘blog-medium’ и т.д. — это названия зарегистрированный размеров миниатюр, которые не нужно создавать при загрузке оригинального изображения.

Заключение

Прежде чем использовать материал из этой статьи, нужно убедиться, что удаляемые размеры не используются в текущей теме, в качестве миниатюр для записей, в боковой панели или в других типах постов. Удаляйте создаваемые копии только когда уверены, что они не нужны для правильной работы темы.

Существуют плагины для динамического создания миниатюр, например, Kama Thumbnail. C его помощью можно динамически создавать те размеры, которые нужны в теме, а загружать только оригиналы. Я так и делаю на тех проектах, где посещаемость невелика, а картинок много. На популярных проектах такой плагин приводит к большой нагрузке на сервер, поэтому им не нужно злоупотреблять.

Если вы вносите изменения на уже рабочем сайте с загруженными картинками, то можно воспользоваться плагином «Force Regenerate Thumbnails», чтобы удалить все старые копии и оставить только оригиналы картинок, и создать новые копии заново, на основе новых настроек, из этих самых оригиналов.

Оригиналы, в свою очередь, прекрасно жмет и уменьшает в разрешении плагин Imsanity. Рекомендую.

Настоящий материал самостоятельно опубликован в нашем сообществе пользователем proper на основании действующей редакции Пользовательского Соглашения. Если вы считаете, что такая публикация нарушает ваши авторские и/или смежные права, вам необходимо сообщить об этом администрации сайта на EMAIL abuse@proru.org с указанием адреса (URL) страницы, содержащей спорный материал. Нарушение будет в кратчайшие сроки устранено, виновные наказаны.

Добавить комментарий