Как отключить создание копий изображений WP?
0

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

Многие сталкивались с такой проблемой как создание не нужных копий картинок в WordPress, при загрузке. По умолчанию WP создает их 3 штуки, а с версии 4.4 создает 4 штуки + ваша картинка как оригинал идет, итого 5 картинок лежит на сервере. Также если стоит не стандартная тема, то количество копий может вырасти до 5-10, а если стоят еще и какие-то дополнительные плагины вроде Woocommerce или портфолио, как у меня, то копий может быть еще больше... Конечно же это достаточно плохо, потому что каждая картинка занимает место на диске, для хостингов сайтов где дисковое пространство ограничено - это просто фатально. В этой статье мы с вами разберем несколько способов избавиться от этого недостатка.

 

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

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

 

Узнать какие размеры копии создаются можно зайдя в папку /wp-content/uploads/. Там вы увидите примерно такое:

Столько копий создается на стандартной теме WP - Twenty Fifteen. Здесь 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
		)
)

Вот в целом и всё, мы с вами поняли как узнать какие копии создаются на нашем сайте, и как они называются. Теперь можно перейти непосредственно к их отключению.

 

Как отключить создание копий при загрузке картинок в WordPress?

Давайте отключим создание тех копий, что создаются по умолчанию в WP, зайдем в Настройки > Медиафайлы и там выставите нуль только для крупного размера.

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

Лично я вам рекомендую оставить размеры "миниатюра" и "средний", так как они могут использоваться при создании стандартных галерей и к примеру в превью загружаемых файлов вашей админки WP. Если вы их уберете, то возможно у вас перестанет работать определенный функционал. А в админке картинки будут загружаться намного дольше, и будут расходовать намного больше трафика, так как WordPress буде грузить оригиналы изображений.

 

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

Однако вы можете также и отключить это в скрытом файле настроек вашего движка WP. Перейдите по ссылке: site.ru/wp-admin/options.php и укажите 0 в настройке medium_large_size_w.

Отключение размера medium_large из админки

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

 

 

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

Как мы уже поняли еще 2 копии создаются самой темой. Обычно код, который отвечает за генерацию дополнительных размеров можно увидеть в functions.php. Если там нет, то код может находиться в другом месте (у темы возможно есть внутренние папки с "плагинами" и настройками). Итак зайдя по FTP и открыв файл, ищите функцию add_image_size(). Выглядеть она будет как-то так:

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

Вы можете её удалить или закомментировать, тем самым отключив генерацию размера 1100x612.

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

set_post_thumbnail_size( 150, 150 );

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

 

 

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

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

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

Здесь мы видим 'image-name' - название нашего размера, взять его можно с помощью способа выше. Само удаление будет иметь связь с событием 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' и прочее, указывайте свои названия зарегистрированных размеров копий, которые не должны создаваться при загрузке оригинала.

 

 

Решение плагином:

Как и в любом способе я могу вам также посоветовать использование плагина: Force Regenerate Thumbnails. Он будет полезен, если ваш сайт уже работает. С его помощью вы сможете удалить все изображения кроме оригинала, далее создать новые копии, на основе настроек.

Запись опубликована В категории: WordPress

Shnapik

Вебмастер с опытом ищет приют! Возьмите меня, а то меня рвут!

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *