Выводим все размеры изображений в медиа загрузчике

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

Также для этого существуют несколько плагинов, который добавляют подобный функционал, которого нет в ядре WordPress.

Но, благодаря новому фильтру image_size_names_choose, добавленному в функцию image_size_input_fields() в wp-admin/includes/media.php, добавление дополнительных размеров изображений в медиа загрузчик теперь совсем не сложное.

Этот код работает в версиях WordPress 3.5+ но, конечно же, медиа загрузчик WP 3.5 использует выпадающий список вместо радио-кнопок как на скриншоте ниже (было в версии WP 3.3).

Итак, читаем как сделать из такого:

default_image_sizes_media_uploader_web[1]

Такое

add_image_sizes_media_uploader_web[1]

Сам код..

Как мы и упоминали выше, можно использовать новый фильтр image_size_names_choose filter для доступа к массиву, содержащему стандартные размеры изображений, и добавления дополнительного размера изображений к ним.

Добавьте следующий код в файл functions.php вашей темы:

/**
 * Filter callback to add image sizes to Media Uploader
 *
 * WP 3.3 beta adds a new filter 'image_size_names_choose' to
 * the list of image sizes which are displayed in the Media Uploader
 * after an image has been uploaded.
 *
 * See image_size_input_fields() in wp-admin/includes/media.php
 * 
 * Tested with WP 3.3 beta 1
 *
 * @uses get_intermediate_image_sizes()
 *
 * @param $sizes, array of default image sizes (associative array)
 * @return $new_sizes, array of all image sizes (associative array)
 * @author Ade Walker http://www.studiograsshopper.ch
 */
function sgr_display_image_size_names_muploader( $sizes ) {
	
	$new_sizes = array();
	
	$added_sizes = get_intermediate_image_sizes();
	
	// $added_sizes - индексированный массив. поэтому необходимо конвертировать его
	// в ассоциативный массив, используя $value для $key и $value
	foreach( $added_sizes as $key => $value) {
		$new_sizes[$value] = $value;
	}
	
	// Сохраняем метки в $sizes, и объединяем два массива
	$new_sizes = array_merge( $new_sizes, $sizes );
	
	return $new_sizes;
}
add_filter('image_size_names_choose', 'sgr_display_image_size_names_muploader', 11, 1);

Некоторая полезная информация…

  • Строка 18: Параметр $sizes, который передается функции, является массивом, содержащим дефолтные размеры изображений:
    array(
    'thumbnail' => __('Thumbnail'),
    'medium' => __('Medium'),
    'large' => __('Large'),
    'full' => __('Full Size')
    );
    

    Это все находится в ассоциативном массиве.

  • Строка 22: Функция get_intermediate_image_sizes() используется для получения списка всех размеров изображений, которые были зарегистрированы функцией add_image_size() при установке WordPress, или же темой или плагинами. Список содержит стандартные размеры изображений (за исключением ‘Full’ (‘Оригинальный’)) и содержится в виде индексированного массива, выглядит примерно так:
    '0' => 'thumbnail',
    '1' => 'medium',
    '2' => 'large',
    '3' => 'special-added-image-size',
    '4' => 'some-other-added-image-size',
    etc
    
    
  • Строка 26: Цикл перебирает массив $added_sizes и создает новый массив с именем $new_sizes, который объединяется потом с оригинальным $sizes для генерации итогового результата.

Надеемся, что статья вам помогла с отображением всех размеров изображений в медиа загрузчике WordPress.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top