Использование функции image_downsize() в WordPress: руководство

IMAGE_DOWNSIZE() │ WP 2.5.0

Функция image_downsize() позволяет изменить размер изображения так, чтобы оно соответствовало определённому размеру (например, для миниатюры или среднего размера).

Эта функция не создаёт новую уменьшенную копию изображения. Она просто возвращает уже существующую уменьшенную версию, если такая есть.

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

Применение функции

  • Использует: wp_get_attachment_url(), image_get_intermediate_size()
  • Используется в: wp_get_attachment_thumb_url(), wp_get_attachment_image_src()
  • Время выполнения: 1 раз — 0.001024 сек (очень медленно) | 50000 раз — 6.16 сек (быстро) | PHP 7.0.8, WP 4.6

Хуки от функции

  • image_downsize

Возвращаемое значение

Функция возвращает массив с данными об изображении или false, если изображение отсутствует.

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

image_downsize( $id, $size );
  • $id (int) — обязательный параметр. ID вложения для изображения.
  • $size (string|int[]) — размер изображения. Принимает любое зарегистрированное имя размера изображения или массив значений ширины и высоты в пикселях (в указанном порядке).
  • По умолчанию: 'medium'

Примеры

Пример 1: Получение URL изображения среднего размера

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

function wp_get_attachment_medium_url( $id ){
    $medium_array = image_downsize( $id, 'medium' );
    $medium_path = $medium_array[0];

    return $medium_path;
}

Пример 2: Как работает функция

Предположим, у нас есть вложение с ID 55 — это изображение: http://example.com/wp-content/uploads/2014/02/wix.png с размером 500x258 пикселей. В настройках медиафайлов указаны следующие размеры для изображений: 80x80, 300x300, 1000x1000. Когда это изображение загружается, WP создаёт две меньшие копии: 80x80 и 300x300.

Теперь посмотрим, что вернёт функция при указании разных размеров:

$img = image_downsize( 55, 'full' );
/*
Array
(
    [0] => http://example.com/wp-content/uploads/2014/02/wix.png
    [1] => 500
    [2] => 258
    [3] =>
)
*/

$img = image_downsize( 55, 'thumbnail' );
/*
Array
(
    [0] => http://example.com/wp-content/uploads/2014/02/wix-80x80.png
    [1] => 80
    [2] => 80
    [3] => 1
)
*/

$img = image_downsize( 55 );
/*
Array
(
    [0] => http://example.com/wp-content/uploads/2014/02/wix-300x258.png
    [1] => 300
    [2] => 258
    [3] => 1
)
*/

$img = image_downsize( 55, array(100, 90) );
/*
Array
(
    [0] => http://example.com/wp-content/uploads/2014/02/wix.png
    [1] => 100
    [2] => 51
    [3] =>
)
*/

$img = image_downsize( 55, array(100, 80) );
/*
Array
(
    [0] => http://example.com/wp-content/uploads/2014/02/wix-80x80.png
    [1] => 80
    [2] => 80
    [3] => 1
)
*/

Изменения в функции

Функция image_downsize() была введена с версии 2.5.0. Пример кода функции доступен в файле: wp-includes/media.php.

function image_downsize( $id, $size = 'medium' ) {
    $is_image = wp_attachment_is_image( $id );

    $out = apply_filters( 'image_downsize', false, $id, $size );

    if ( $out ) {
        return $out;
    }

    $img_url          = wp_get_attachment_url( $id );
    $meta             = wp_get_attachment_metadata( $id );
    $width            = 0;
    $height           = 0;
    $is_intermediate  = false;
    $img_url_basename = wp_basename( $img_url );

    if ( ! $is_image ) {
        if ( ! empty( $meta['sizes']['full'] ) ) {
            $img_url          = str_replace( $img_url_basename, $meta['sizes']['full']['file'], $img_url );
            $img_url_basename = $meta['sizes']['full']['file'];
            $width            = $meta['sizes']['full']['width'];
            $height           = $meta['sizes']['full']['height'];
        } else {
            return false;
        }
    }

    $intermediate = image_get_intermediate_size( $id, $size );

    if ( $intermediate ) {
        $img_url         = str_replace( $img_url_basename, $intermediate['file'], $img_url );
        $width           = $intermediate['width'];
        $height          = $intermediate['height'];
        $is_intermediate = true;
    } elseif ( 'thumbnail' === $size && ! empty( $meta['thumb'] ) && is_string( $meta['thumb'] ) ) {
        $imagefile = get_attached_file( $id );
        $thumbfile = str_replace( wp_basename( $imagefile ), wp_basename( $meta['thumb'] ), $imagefile );

        if ( file_exists( $thumbfile ) ) {
            $info = wp_getimagesize( $thumbfile );

            if ( $info ) {
                $img_url         = str_replace( $img_url_basename, wp_basename( $thumbfile ), $img_url );
                $width           = $info[0];
                $height          = $info[1];
                $is_intermediate = true;
            }
        }
    }

    if ( ! $width && ! $height && isset( $meta['width'], $meta['height'] ) ) {
        $width  = $meta['width'];
        $height = $meta['height'];
    }

    if ( $img_url ) {
        list( $width, $height ) = image_constrain_size_for_editor( $width, $height, $size );

        return array( $img_url, $width, $height, $is_intermediate );
    }

    return false;
}

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

  • add_image_size()
  • delete_post_thumbnail()
  • get_intermediate_image_sizes()
  • get_post_thumbnail_id()
  • get_the_post_thumbnail()
  • image_get_intermediate_size()
  • remove_image_size()
  • set_post_thumbnail()
  • the_post_thumbnail()
  • wp_get_attachment_image_url()

Эти функции помогут вам лучше работать с изображениями во WordPress.

Leave a Reply

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