WordPress как на ладони
wordpress jino

Отключаем создание копий картинок в WordPress

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

Когда нужно убирать генерацию копий изображений?

Во всех случаях, когда вам не нужны размеры создаваемых дублей. Если вы пользуетесь недорогим хостингом и дисковое пространство на нем ограничено. То стоит проверить, не создаются ли копии картинок, которые не используются в теме. Также, многочисленные дубли загружаемых изображений, которые помещаются в папку uploads, могут значительно увеличить размер бэкап файлов - это как минимум неудобно. Представьте сами, вы загрузили одну картинку, а WordPress создал еще 7 миниатюр к ней - 7 копий этой картинки, при этом некоторые из дублей могут быть почти такого же размера как и оригинал. Если у вас на сайте тысячи картинок, то это может вызвать проблемы и сложности.

Как узнать какие размеры используются на сайте?

По умолчанию WordPress создает четыре копии:

  1. миниатюру (thumbnail)
  2. средний размер (medium)
  3. умеренный большой (medium_large) с версии 4.4.
  4. большой размер (large)

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

Прежде всего, вам нужно определить сколько копий создается при загрузке изображения. Для этого зайдите в админ панель и загрузите изображение большого размера, пусть это будет картинка 1900х1000 пикселей (большой размер нужен для того, чтобы были созданы все возможные копии). Затем зайдите в папку загрузок изображений, обычно это: /wp-content/uploads/. Там файлы сортируются по годам и месяцам, зайдите в последний год и месяц, там вы должны увидеть файл, который только что загрузили и все его копии:

Копии оригинала загружаемых картинок

Как видите на картинке, мой тестовый блог (тема Twenty Fifteen) создал 5 копий. Где 4 это копии по умолчанию, а 1 остальная - это настройки темы.

Узнаем названия каждого размера

Пример с заливкой изображения, показывает сколько из создается, но не показывает как называется каждый размер. Название (ID) размера нужно знать, чтобы его отключить.

Чтобы узнать какие размеры зарегистрированы на сайте, добавьте следующий код в темы header.php или footer.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() ) );

Теперь зайдите на сайт и вы увидите подобный массив:

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
		)
)

Как отключить создание копий?

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

Страница настроек Медиафайлы - оставляем только нужные размеры

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

Заметка: для отображения картинок в загрузчике медиафайлов при прикреплении картинки к записи, используются средний размер (medium). Но если его нет, используется миниатюра (thumbnail). Поэтому средний размер можно смело отключать.

Размер medium_large, создаваемый по умолчанию с версии 4.4 отключить на странице настроек медиафайлов невозможно. Для отключения используйте хук ниже. Или зайдите на скрытую страницу настроек site.ru/wp-admin/options.php и укажите 0 в настройке medium_large_size_w:

Отключение размера medium_large из админки
#1 Отключение в коде

Остальные 2 копии создаются темой. Обычно код темы отвечающий за генерацию дополнительных размеров можно найти в файле functions.php. Ищите размеры которые вы видели зайдя через 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 );

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

#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' название размера ('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',
	) );
}
Вариант 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;
} );

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

Заключение

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

Плагин - Kama Thumbnail

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

Плагин - Force Regenerate Thumbnails

Обращаю внимание, что при отключении размеров миниатюр, сами файлы миниатюр которые лежат в папках НЕ удаляются. Отключается только лишь зарегистрированный размер и при очередной загрузке файла миниатюра с отключенным размером создаваться уже не будет. Чтобы почистить «старые» файлы используйте плагин Force Regenerate Thumbnails. Плагин полностью пересоздаст физические файлы в соответствии с текущими установками для миниатюр.

Перевозки грузов

перевозки грузов

bryansk.dellin.ru

Отключаем создание копий картинок в WordPress 56 комментариев
Полезные 6 Все
  • Андрей cайт: lifeinbet.ru

    Иногда очень правильные вещи лежат на поверхности, а ты их не замечаешь. Вот так и я ходил мимо этих дублей картинок и не замечал. Спасибо что подсказали. Блин, даже когда загружаешь изображение, видно что движок их клонит.

    1
    Ответить12 дней назад #

Здравствуйте, !

Ваш комментарий