WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

add_image_size() WP 2.9.0

Регистрирует новый размер миниатюр.

Регистрация означает, что WordPress, при загрузке изображения, кроме базовых размеров будет создавать еще один файл - измененную копию оригинала с указанными размерами.

Чтобы для поста можно было определить картинку миниатюру, нужно активировать эту возможность функцией - add_theme_support( 'post-thumbnails' ); в файле шаблона funсtions.php.

Используется в: set_post_thumbnail_size().

Хуков нет.

Возвращает

Ничего не возвращает.

Использование

add_image_size( $name, $width, $height, $crop );
$name(строка) (обязательный)
Название нового размера картинок.
По умолчанию: нет
$width(число) (обязательный)
Ширина миниатюры (в пикселях).
$height(число) (обязательный)
Высота миниатюры (в пикселях).
$crop(логический)

Как создавать миниатюру?

  • false - мягкое кадрирование: миниатюра создается по одной из подходящих сторон: указанной ширине или высоте. Итоговая картинка не будет точно совпадать указанным размерам;

  • true - жесткое кадрирование: миниатюра создается точно по указанным размерам. Подбирается наиболее подходящая сторона, картинка уменьшается по ней, а у противоположной стороны лишняя часть, не подходящая по пропорциям обрезается;

  • array( координата_X, координата_Y ) - указание позиции кадрирования, т.е. если указать массив (array( 'right', 'top')), то изображение будет кадрированно с указанных позиций.
    По умолчанию: false

Зарезервированные названия размеров

thumb, thumbnail, medium, large, post-thumbnail

Названия "thumb" и "thumbnail" - это алиасы (синонимы) и относятся к одинаковым файлам.

Смотрите также описание функции image_downsize().

Также вы можете установить опции создаваемой миниатюры через:

update_option('thumbnail_size_w', 160);
update_option('thumbnail_size_h', 160);
update_option('thumbnail_crop', 1);

Примеры

Добавим новые размеры миниатюр

Регистрируем новые размеры миниатюр, добавив такой код в файл шаблона functions.php:

if ( function_exists( 'add_theme_support' ) ) {
	add_theme_support( 'post-thumbnails' );
		set_post_thumbnail_size( 150, 150 ); // размер миниатюры поста по умолчанию
}

if ( function_exists( 'add_image_size' ) ) {
	add_image_size( 'category-thumb', 300, 9999 ); // 300 в ширину и без ограничения в высоту
	add_image_size( 'homepage-thumb', 220, 180, true ); // Кадрирование изображения
}

Кадрирование (crop)

#1 - false (мягкое кадрирование)

Эта строка укажет WP, что при загрузке нового файла, нужно создать его уменьшенную копию. В этом случае миниатюра будет подогнана под ширину или высоту, смотря какая из сторон подходит больше, а противоположная сторона будет уменьшена пропорционально и скорее всего не будет больше указанного размера. Например, у нас оригинал картинки 2500х1800 пикселей мы делаем миниатюру 220х180 пикселей. Картинка будет уменьшена до размеров -  250х180 px, т.е. высота будет 180, как мы и указали, однако ширина получится выше указанной 250 а не 220. В этом случае картинка не кадрируется и уменьшенная копия сохраняет пропорции полностью.

add_image_size( 'homepage-thumb', 220, 180 );

#2 - true (жесткое кадрирование)

Если установить четвертый параметр в true, то миниатюра будет уменьшена и обрезана точно под указанные размеры. Например, у нас оригинал картинки 2500х1800 пикселей мы делаем миниатюру 220х180 пикселей. Оригинал будет уменьшен до высоты 180xp (тогда ширина его как бы равна 250px), а ширина будет обрезана по краям по 15px и в итоге получим уменьшенную копию: 220х180 пикселей:

add_image_size( 'homepage-thumb', 220, 180, true ); // 220 pixels wide by 180 pixels tall, hard crop mode

#3 - уменьшение по нужной стороне

Чтобы уменьшить картинку по одной из нужных нам сторон, нужно указать противоположной стороне огромное значение. Например, у нас есть картинка 2500х1800, нам нужно получить миниатюру 500х1800, тогда указываем так:

add_image_size( 'homepage-thumb', 500, 9999 );

#4 - Array( x, y ) (жесткое кадрирование с указанием позиций)

С версии 3.9 появилась возможность указывать позицию кадрирования. Давайте добавим размер миниатюры, которая будет размером 220х220 пикселей и будет фрагментом от оригинала, который будет взят с левого верхнего угла (left, top):

add_image_size( 'custom-size', 220, 220, array( 'left', 'top' ) );

Х_позиция может быть: 'left' 'center' или 'right'.
Y_позиция может быть: 'top', 'center' или 'bottom'.

Использование новых размеров

Мы зарегистрировали 3, отличных от базовых, размера: post-thumbnailscategory-thumbhomepage-thumb. Чтобы теперь использовать эти размеры (выводить картинки в шаблоне), можно использовать следующие функции:

Избранная картинка (futured image)

Чтобы использовать новый размер при выводе картинки установленной как "Избранная картинка" поста, в файле шаблона нужно использовать функцию the_post_thumbnail():

if ( has_post_thumbnail() ) {
	the_post_thumbnail( 'category-thumb' ); // category-thumb - название размера
}

Для библиотеки картинок (админ-панель)

Чтобы добавить новый размер в выбор размеров при вставке картинки в пост, нужно использовать фильтр-хук image_size_names_choose, в котором нужно добавить размер и указать для него понятное название:

add_filter( 'image_size_names_choose', 'my_custom_sizes' );

function my_custom_sizes( $sizes ) {
	return array_merge( $sizes, array(
		'category-thumb' => 'Мой размерчик',
	) );
}
razmerchik

Для основных медиафайлов (PHP/Templates)

Также можно выводить картинки (по размерам) напрямую из библиотеки WordPress по ID картинки. Для этого используйте функцию wp_get_attachment_image():

<?php
// Подразумевается, что у вас в библиотеке есть картинка с ID 42...
echo wp_get_attachment_image( 42, 'category-thumb' );
?>

Если нам нужно получить только УРЛ картинки а не готовый тег <img>, то используйте функцию wp_get_attachment_image_src().

Плагины

  1. Regenerate Thumbnails - этот плагин позволяет создать новые размеры для каждого загруженного изображения. Полезен когда вы изменили или добавили новые размеры миниатюр (через Настройки > Медиафайлы) во время когда в библиотеке уже есть загруженные изображения. Или когда вы изменили размеры "Избранного изображения" поста.

  2. Force Regenerate Thumbnails - удаляет ранее созданные размеры и создает новые, на основе текущих установок.

  3. AJAX thumbnail rebuild - позволяет пересоздать миниатюры. Полезен, если вы использовали функцию add_image_size() когда у вас уже есть загруженные изображения. (Это медленный плагин, но при этом в нем не бывает ошибок с недостатком выделенной памяти).

  4. Simple Image Sizes - позволяет создавать новые размеры миниатюр прямо из панели "Медиафайлы". Он также умеет пересоздавать миниатюры. Он добавляет новые размеры в выбор для постов, так вы можете вставлять новые размеры в посты. Вы можете выбирать какие из размеров вы бы хотели пересоздать и для каких типов постов это нужно сделать.

Код add image size: wp-includes/media.php WP 4.8.1

<?php
function add_image_size( $name, $width = 0, $height = 0, $crop = false ) {
	global $_wp_additional_image_sizes;

	$_wp_additional_image_sizes[ $name ] = array(
		'width'  => absint( $width ),
		'height' => absint( $height ),
		'crop'   => $crop,
	);
}

Cвязанные функции

Из метки: thumbnail (image картинки-миниатюры)

add_image_size 40 комментариев
Полезные 6 Вопросы 2 Все
  • искал тему как переименовывать миниатюры , не по цыфрам как wordpress name-100x100.jpg a в image-small.jpg
    еще не тестировал - просто закину сюда чтоб не потерять

    add_filter( 'image_make_intermediate_size', 'wpse_123240_rename_intermediates' );
    
    function wpse_123240_rename_intermediates( $image ) 
    {
    
    $info = pathinfo($image);
    $dir = $info['dirname'] . '/';
    $ext = '.' . $info['extension'];
    $name = wp_basename( $image, "$ext" );
    
    $img = wp_get_image_editor( $image );
    
    $img_size = $img->get_size();
    
    switch( $img_size['width'] )
    {
    case '100' :
    $size_based_img_name_prefix = 'small';
    break;
    case '150' :
    $size_based_img_name_prefix = 'medium';
    break;
    case '360' :
    $size_based_img_name_prefix = 'large';
    break;
    }
    
    switch( $img_size['height'] )
    {
    case '100' :
    $size_based_img_name_prefix = 'small';
    break;
    case '150' :
    $size_based_img_name_prefix = 'medium';
    break;
    case '360' :
    $size_based_img_name_prefix = 'large';
    break;
    }
    
    $name_prefix = substr( $name, 0, strrpos( $name, '-' ) );
    $new_name = $dir . $name_prefix . '-' . $size_based_img_name_prefix . $ext;
    $did_it = rename( $image, $new_name );
    if( $did_it )
    return $new_name;
    
    return $image;
    }
    Ответить17 дней назад #
    • Kama4472

      Не лучшее решение кажется, там все эти зависимости в метаданных хранятся, а так вся изначальная логика рушится...

      Ответить4 дня назад #

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

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