Сам WordPress создаёт четыре разных копии одной и той же картинки под разные нужны. Но в последующем может их не использовать. Естественно со временем объём каталога uploads сильно вырастит.
По умолчанию WordPress создает 4 копии одной и той же картинки с разными размерами:
- миниатюру (thumbnail)
- средний размер (medium)
- умеренный большой (medium_large) с версии 4.4.
- большой размер (large)
Ну и помимо стандартных картинок, дополнительные могут создаваться плагинами и темой, в тот же каталог uploads или другие. В зависимости от настроек админки, обычно это: /wp-content/uploads/, где по годам и месяцам, зайдите в последний год и месяц, там вы должны увидеть файл, который только что загрузили и все его копии с разными размерами:
Чтобы узнать какие размеры зарегистрированы на сайте, добавьте следующий код в файл темы header.php или footer.php, заключив код в раздел с <php ?> После чего увидите массив.
/**
* Получает информацию обо всех зарегистрированных размерах картинок.
*
* @global $_wp_additional_image_sizes
* @uses get_intermediate_image_sizes()
*
* @param boolean [$unset_disabled = true] Удалить из списка размеры с 0 высотой и шириной?
* @return array Данные всех размеров.
*/
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'],
);
}
// size registered, but has 0 width and height
if( $unset_disabled && ($sizes[ $_size ]['width'] == 0) && ($sizes[ $_size ]['height'] == 0) )
unset( $sizes[ $_size ] );
}
return $sizes;
}
die( print_r( get_image_sizes() ) );
[/bash]
Теперь зайдите на сайт и вы увидите подобный массив:
Array
(
[thumbnail] => Array
(
[width] => 150
[height] => 150
[crop] => 1
)
[medium] => Array
(
[width] => 300
[height] => 300
[crop] =>
)
[medium_large] => Array
(
[width] => 768
[height] => 0
[crop] =>
)
[large] => Array
(
[width] => 1024
[height] => 1024
[crop] =>
)
[post-thumbnail] => Array
(
[width] => 825
[height] => 510
[crop] => 1
)
)
[/bash]
Как отключить создание копий картинок из админки?
Зайдите в Настройки > Медиафайлы и поставьте 0 для «крупного» и «среднего» размеров.
Размер thumbnail (миниатюра) рекомендую оставить, потому что этот размер используются при создании стандартной галереи и в превью загруженных файлов в админ-панели. Если его убрать, то стандартная галерея не будет работать как положено. А окно медиатеки будет грузить оригиналы файлов, что будет сильно тормозить админку.
Заметка: для отображения картинок в загрузчике медиафайлов при прикреплении картинки к записи, используются средний размер (medium). Но если его нет, используется миниатюра (thumbnail). Поэтому средний размер можно смело отключать.
Размер medium_large, создаваемый по умолчанию с версии 4.4 отключить на странице настроек медиафайлов невозможно. Для отключения используйте хук ниже. Или зайдите на скрытую страницу настроек site.ru/wp-admin/options.php и укажите 0 в настройке medium_large_size_w:
#1 Отключение в коде
Остальные 2 копии создаются темой. Обычно код темы отвечающий за генерацию дополнительных размеров можно найти в файле functions.php. Ищите размеры которые вы видели зайдя через FTP (672, 1038, 576) и функцию add_image_size(). Выглядеть она будет примерно так:
add_image_size( 'homepage-thumb', 1038, 576, true );[/bash]
Удалите или закомментируйте эту строку, так вы отключите генерацию размера 1038х576.
Также за создание копий может отвечать функция set_post_thumbnail_size(), выглядит она так:
set_post_thumbnail_size( 150, 150 );[/bash]
Её нужно удалить или закомментировать.
#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' );
}[/bash]
Тут 'image-name' название размера ('homepage-thumb' из примера выше). Удаление вешается на событие after_setup_theme, обычно этого события достаточно. 999 означает что приоритет выполнения функции удаления, поздний, т.е. функция будет вызвана после всех остальных во время этого события.
#3 Отключение создания доп. размеров через фильтр
Варианты ниже могут стать спасением, когда никакой другой не подходит. Оба они практически одинаковые. Они не отключают регистрацию размеров, а просто удаляют их при получении в нужных местах кода.
Вариант 1
Этот вариант более полный, потому что он выключает размеры в нескольких местах, а не только во время загрузки изображения в папку uploads, как это делает второй вариант.
Также плагины работы с изображениями используют функцию get_intermediate_image_sizes() для получения промежуточных размеров. С этим вариантом, такие плагины не увидят ненужных размеров вовсе.
## отключаем создание миниатюр файлов для указанных размеров
add_filter( 'intermediate_image_sizes', 'delete_intermediate_image_sizes' );
function delete_intermediate_image_sizes( $sizes ){
// размеры которые нужно удалить
return array_diff( $sizes, array(
'medium_large',
'large',
) );
}[/bash]
Вариант 2
Этот вариант отключает регистрацию указанных размеров только когда картинка загружается на сайт в папку 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;
} );
[/bash]
В этом коде названия: 'blog-large', 'blog-medium' и т.д. - это названия зарегистрированный размеров миниатюр, которые не нужно создавать при загрузке оригинального изображения.
Плагин - Force Regenerate Thumbnails
При отключении размеров миниатюр, сами файлы миниатюр которые лежат в папках не удаляются. Отключается только лишь зарегистрированный размер и при очередной загрузке файла миниатюра с отключенным размером создаваться уже не будет. Чтобы почистить «старые» файлы используйте плагин Force Regenerate Thumbnails. Плагин полностью пересоздаст физические файлы в соответствии с текущими установками для миниатюр.