ОТКЛЮЧЕНИЕ СОЗДАНИЯ КОПИЙ ИЗОБРАЖЕНИЙ В WORDPRESS
По умолчанию WordPress создаёт четыре размера для каждого загружаемого изображения, а если изображение большое, то ещё два дополнительных. Кроме того, темы и плагины могут создавать дополнительные размеры изображений.
В итоге на вашем сайте может создаваться от 5 до 10 копий (дубликатов) каждого загруженного изображения. Это может увеличить требуемое место на диске и размер резервных файлов. Порой все эти копии действительно нужны, но на практике это происходит крайне редко! Поэтому имеет смысл отключить дополнительные размеры миниатюр. Давайте разберёмся, как это сделать.
СОДЕРЖАНИЕ
- Когд�� нужно отключить создание копий изображений?
- Как узнать, какие размеры используются на сайте?
- Как найти все зарегистрированные размеры миниатюр
- Метод 1: Команда WP-CLI
- Метод 2: Код PHP
- Как отключить создание копий?
-
1 Отключение в коде
-
2 Удаление зарегистрированных размеров через фильтр
-
3 Отключение создания дополнительных размеров через фильтр
-
4 Изменение или отключение *-scaled размера
-
5 Удаление старых размеров (необходимость в файлах)
-
- Заключение
КОГДА НУЖНО ОТКЛЮЧИТЬ СОЗДАНИЕ КОПИЙ ИЗОБРАЖЕНИЙ?
Удалять размер копий следует в случаях, когда ваша тема не использует все созданные размеры. Сначала нужно проверить, есть ли у вас дубликаты изображений, которые не используются в теме.
Многочисленные дубликаты uploaded фотографий, которые находятся в папке загрузок, могут значительно увеличить размер резервных файлов - это, по крайней мере, неудобно. Представьте, что вы загружаете одно изображение, а WordPress создаёт 7 миниатюр для него - 7 копий этого изображения, при этом некоторые дубликаты могут быть практически одного размера с оригиналом. Из этих 7 копий только одна используется на главной странице, и даже эта будет висеть там, пока не будет заменена следующей. Используемый файл останется на хостинге на всю жизнь, и использовался он всего один день или неделю.
Если у вас на сайте тысячи изображений, это может вызвать проблемы и сложности.
КАК УЗНАТЬ, КАКИЕ РАЗМЕРЫ ИСПОЛЬЗУЮТСЯ НА САЙТЕ?
По умолчанию WordPress создаёт следующие копии:
- thumbnail — миниатюра (можно изменить из админ-панели).
- medium — средний размер (можно изменить из админ-панели).
- medium_large — умеренно большой (с версии WP 4.4).
- large — большой (можно изменить из админ-панели).
- 1536x1536 — 2x medium_large (с версии WP 5.3).
- 2048x2048 — 2x large (с версии WP 5.3).
- -scaled — см. примечание.
Кроме этих размеров, дополнительные могут создаваться самой темой. Например, дополнительный размер для поста миниатюры, для постов в боковой панели или для других нужд.
Сначала вам нужно определить, сколько копий создаётся при загрузке изображения. Для этого зайдите в админ-панель и загрузите большое изображение, например, 1900x1000 пикселей (большой размер нужен, чтобы создались все возможные копии). Затем перейдите в папку загрузок вашего сайта, обычно эт��:
/wp-content/uploads/
Там файлы отсортированы по годам и месяцам, переходите в последний год и месяц, и вы должны увидеть файл, который вы только что загрузили, и все его копии.
КАК УЗНАТЬ ВСЕ ЗАРЕГИСТРИРОВАННЫЕ РАЗМЕРЫ МИНИАТЮР
Можно использовать несколько способов, чтобы узнать, какие размеры зарегистрированы на сайте.
МЕТОД 1: КОМАНДА WP-CLI
Запустите следующую команду в WP-CLI:
$wp media image-size
Вы получите таблицу с зарегистрированными размерами:
+---------------------------+-------+--------+-------+-------+
| name | width | height | crop | ratio |
+---------------------------+-------+--------+-------+-------+
| full | | | N/A | N/A |
| twentyfourteen-full-width | 1038 | 576 | hard | 173:96|
| large | 1024 | 1024 | soft | N/A |
| medium_large | 768 | 0 | soft | N/A |
| medium | 300 | 300 | soft | N/A |
| thumbnail | 150 | 150 | hard | 1:1 |
+---------------------------+-------+--------+-------+-------+
МЕТОД 2: КОД PHP
Добавьте следующий код в файл header.php
или footer.php
вашей темы:
/**
* Получить информацию обо всех зарегистрированных размерах изображений.
*/
function get_image_sizes( $unset_disabled = true ) {
$wais = & $GLOBALS['_wp_additional_image_sizes'];
$sizes = array();
foreach ( get_intermediate_image_sizes() as $_size ) {
if ( in_array( $_size, array('thumbnail', 'medium', 'medium_large', 'large') ) ) {
$sizes[ $_size ] = array(
'width' => get_option( "{$_size}_size_w" ),
'height' => get_option( "{$_size}_size_h" ),
'crop' => (bool) get_option( "{$_size}_crop" ),
);
} elseif ( isset( $wais[$_size] ) ) {
$sizes[ $_size ] = array(
'width' => $wais[ $_size ]['width'],
'height' => $wais[ $_size ]['height'],
'crop' => $wais[ $_size ]['crop'],
);
}
if( $unset_disabled && ($sizes[ $_size ]['width'] == 0) && ($sizes[ $_size ]['height'] == 0) )
unset( $sizes[ $_size ] );
}
return $sizes;
}
die( print_r( get_image_sizes() ) );
Теперь перейдите на сайт и вы увидите массив с зарегистрированными размерами.
КАК ОТКЛЮЧИТЬ СОЗДАНИЕ КОПИЙ?
Чтобы отключить генерацию копий по умолчанию, перейдите в Настройки > Медиафайлы и установите ноль для "большого" и "среднего" размеров.
Важно: Рекомендуется оставить размер миниатюры, так как это нужно для формирования стандартной галереи и превью загруженных файлов в админ-панели. Если вы его уберёте, стандартная галерея работать не будет. Также окно медиатеки будет загружать оригиналы файлов, что значительно замедлит работу админ-панели.
Обратите внимание: при отображении изображений в медиазагрузчике при прикреплении изображения к посту используется средний размер. Но если его нет, то используется миниатюра. Поэтому средн��й размер можно безопасно отключить.
Размер medium_large
, созданный по умолчанию с версии 4.4, нельзя отключить на странице настроек медиа. Чтобы отключить его, используйте следующий хук, или зайдите на скрытую страницу настроек example.com/wp-admin/options.php
и установите 0 в настройке medium_large_size_w
.
1 ОТКЛЮЧЕНИЕ В КОДЕ
Другие две копии создаются темой. Обычно код темы, отвечающий за генерацию дополнительных размеров, можно найти в файле functions.php
. Ищите размеры, которые вы видели через FTP и функцию add_image_size()
. Например:
add_image_size( 'homepage-thumb', 1038, 576, true );
Удалите или закомментируйте эту строку, чтобы отключить создание размера 1038x576.
Создание копий также может управляться функцией set_post_thumbnail_size()
, которая выглядит так:
set_post_thumbnail_size( 150, 150 );
Эту строку также нужно удалить или закомментировать.
2 УДАЛЕНИЕ ЗАРЕГИСТРИРОВАННЫХ РАЗМЕРОВ ЧЕРЕЗ ФИЛЬТР
В версии WordPress 3.9 появилась функция remove_image_size()
, которая позволяет удалять указанный размер миниатюры (физические файлы не удаляются). Теперь вместо удаления строк вы можете отключить ненужные размеры, добавляя фильтр в файл functions.php
:
add_action( 'after_setup_theme', 'remove_plugin_image_sizes', 999 );
function remove_plugin_image_sizes() {
remove_image_size( 'image-name' );
}
Здесь 'image-name'
- это имя размера, который нужно удалить. Удаление происходит при событии after_setup_theme
, что обычно достаточно. 999 указывает на то, что функция удаления будет вызвана поздно, т.е. после всех других функций во время этого события.
3 ОТКЛЮЧЕНИЕ СОЗДАНИЯ ДОПОЛНИТЕЛЬНЫХ РАЗМЕРОВ ЧЕРЕЗ ФИЛЬТР
Опции ниже могут помочь, если ни один другой вариант не работает. Они почти одинаковые. Они не отключают регистрацию размера, а просто удаляют его при получении в соответствующих частях кода.
ОПЦИЯ 1
Эта опция более полная, так как отключает размеры в нескольких местах, а не только при загрузке изображения в папку загрузок.
Также плагины изображений используют функцию get_intermediate_image_sizes()
, чтобы получить промежуточные размеры. С этим вариантом такие плагины вообще не увидят ненужные размеры.
add_filter( 'intermediate_image_sizes', 'delete_intermediate_image_sizes' );
function delete_intermediate_image_sizes( $sizes ) {
// размеры для удаления
return array_diff( $sizes, [
'medium_large',
'large',
'1536x1536',
'2048x2048',
] );
}
ОПЦИЯ 2
Эта опция отключает регистрацию указанных размеров только тогда, к��гда изображение загружается на сайт в папку загрузок.
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'
и т.д. — это названия зарегистрированных размеров миниатюр, которые не должны создаваться при загрузке оригинального изображения.
4 ИЗМЕНЕНИЕ ИЛИ ОТКЛЮЧЕНИЕ *-SCALED РАЗМЕРА
Для получения дополнительной информации о размере *-scaled
смотрите примечание.
Измените максимальный допустимый размер изображения по ширине/высоте:
add_filter( 'big_image_size_threshold', function(){
return 1600;
});
Отмените размер scaled
- ограничьте максимальный размер изображения:
add_filter( 'big_image_size_threshold', '__return_zero' );
5 УДАЛЕНИЕ СТАРЫХ РАЗМЕРОВ (НЕОБХОДИМЫЕ ФАЙЛЫ)
После отключения ненужных размеров физические файлы для уже загруженных изображений останутся, поэтому их следует удалить.
Для этого вы можете использовать команду wp-cli:
wp media regenerate
или плагин Force Regenerate Thumbnails.
ЗАКЛЮЧЕНИЕ
Перед использованием материалов из этой статьи убедитесь, что отключаемые размеры не используются в вашей текущей теме в качестве миниатюр для постов, в боковой панели или для других типов постов. Удаляйте созданные копии только когда уверены, что они не нужны для корректной работы темы.