WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_get_attachment_image() WP 2.5.0

Получает <img> тег картинки указанного вложения (прикрепленного к посту файла).

Ищем WP-разработчика! Фулл-тайм, удаленка, хорошая зарплата, соц. пакет. Подробности.
Компания Boosta.

Если вложение не удалось найти, то будет возвращена пустая строка.

Если вложение является картинкой, то для нее будет возвращен код, соответствующий указанному размеру (см. параметр $size).

Для прикрепленных файлов типа отличного от картинок (.zip, .xls, .flv) будет возвращена соответствующая этому типу иконка (автоматически определяется WordPress). По умолчанию такая иконка не выводится, чтобы она выводилась нужно выставить 3-й параметр ($icon) в true.

Работает на основе: wp_get_attachment_image_src()

Возвращает

Строку. HTML код картинки в <img> тега.

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

$img = wp_get_attachment_image( $attachment_id, $size, $icon, $attr );
$attachment_id(число) (обязательный)
ID вложения, картинку которого нужно получить.
$size(строка/массив)

Размер картинки. Можно указать в виде:

  • Строки thumbnail, medium, large, full или название имеющегося размера
  • В виде массива из 2-х элементов, определяющих размеры сторон выводимой картинки: array(32,32).

Указание размеров через массив не уменьшает картинку физически, она уменьшается только визуально из наиболее подходящей готовой миниатюры (uploads).

Указание размеров не влияет на размеры выводимых иконок для файлов, они всегда выводятся в оригинальном размере (32х32).

Вместо использования массива, иногда логично зарегистрировать новый размер картинок (add_image_size()) и использовать его наряду с уже установленными (thumbnail, medium, large или full). Такой подход более эффективен, так как нет нужды постоянно проверять какой размер из имеющихся подходил лучше.

По умолчанию: "thumbnail"

$icon(логический)
Использовать ли медиа иконки, для представления вложения. По умолчанию, для вложений типа файл (не картинок), иконка выводится не будет, если нужно выводить иконки для таких типов вложений выставите этот параметр в true.
По умолчанию: false
$attr(массив)

Любые атрибуты для тега <img> в массиве. Например:

array(
	'class'  => 'foo bar',
	'title'  => 'название картинки',
	'alt'    => 'alt картинки',
	'srcset' => '',
	'sizes'  => '',
)

alt по умолчанию берется из данных вложения:

'alt' => trim( strip_tags( get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ) ) )

Примеры

#1. Выведем готовую для HTML картинку

Выведем картинку <img> среднего размера прикрепленного файла-картинки 651:

<?php echo wp_get_attachment_image( 651, 'medium'); ?>

Выведет примерно такой HTML:

<img width="250" height="250" src="http://example.com/image-250x250.png" class="attachment-medium size-medium" alt="Текст из поля Alt Text" />

alt текст будет заполнен, только если он указан для вложения в специальном поле (alt text). В alt не попадает текст из заголовка (title), описания (description) или подписи (caption) картинки...

#2. Пример с указанием произвольного размера

Выведем картинку указанного размера 20х20 пикселей, для вложений типа "картинка" и соответствующую иконку для остальных типов вложений (3-й параметр):

<?php echo wp_get_attachment_image( $post->ID, array(20,20), true); ?>

$post->ID — динамическая передача ID внутри цикла. Создать такой цикл можно, использовав функцию get_posts() (get_posts('post_type=attachment')).

#3. Укажем атрибуты alt и title для картинки

$params = [ 'alt' => 'alt картинки', 'title' => 'название картинки' ]

$tag = wp_get_attachment_image( 15108, 'medium', false, $params );

Получим:

<img width="588" height="216"
 src="/wp-content/uploads/2021/12/clipboard-image-122190.png"
 class="attachment-medium size-medium"
 alt="alt картинки"
 loading="lazy"
 title="название картинки" />

Список изменений

С версии 2.5.0 Введена.
С версии 4.4.0 The $srcset and $sizes attributes were added.
С версии 5.5.0 The $loading attribute was added.

Код wp_get_attachment_image() WP 5.8.2

function wp_get_attachment_image( $attachment_id, $size = 'thumbnail', $icon = false, $attr = '' ) {
	$html  = '';
	$image = wp_get_attachment_image_src( $attachment_id, $size, $icon );

	if ( $image ) {
		list( $src, $width, $height ) = $image;

		$attachment = get_post( $attachment_id );
		$hwstring   = image_hwstring( $width, $height );
		$size_class = $size;

		if ( is_array( $size_class ) ) {
			$size_class = implode( 'x', $size_class );
		}

		$default_attr = array(
			'src'   => $src,
			'class' => "attachment-$size_class size-$size_class",
			'alt'   => trim( strip_tags( get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ) ) ),
		);

		// Add `loading` attribute.
		if ( wp_lazy_loading_enabled( 'img', 'wp_get_attachment_image' ) ) {
			$default_attr['loading'] = 'lazy';
		}

		$attr = wp_parse_args( $attr, $default_attr );

		// If the default value of `lazy` for the `loading` attribute is overridden
		// to omit the attribute for this image, ensure it is not included.
		if ( array_key_exists( 'loading', $attr ) && ! $attr['loading'] ) {
			unset( $attr['loading'] );
		}

		// Generate 'srcset' and 'sizes' if not already present.
		if ( empty( $attr['srcset'] ) ) {
			$image_meta = wp_get_attachment_metadata( $attachment_id );

			if ( is_array( $image_meta ) ) {
				$size_array = array( absint( $width ), absint( $height ) );
				$srcset     = wp_calculate_image_srcset( $size_array, $src, $image_meta, $attachment_id );
				$sizes      = wp_calculate_image_sizes( $size_array, $src, $image_meta, $attachment_id );

				if ( $srcset && ( $sizes || ! empty( $attr['sizes'] ) ) ) {
					$attr['srcset'] = $srcset;

					if ( empty( $attr['sizes'] ) ) {
						$attr['sizes'] = $sizes;
					}
				}
			}
		}

		/**
		 * Filters the list of attachment image attributes.
		 *
		 * @since 2.8.0
		 *
		 * @param string[]     $attr       Array of attribute values for the image markup, keyed by attribute name.
		 *                                 See wp_get_attachment_image().
		 * @param WP_Post      $attachment Image attachment post.
		 * @param string|int[] $size       Requested image size. Can be any registered image size name, or
		 *                                 an array of width and height values in pixels (in that order).
		 */
		$attr = apply_filters( 'wp_get_attachment_image_attributes', $attr, $attachment, $size );

		$attr = array_map( 'esc_attr', $attr );
		$html = rtrim( "<img $hwstring" );

		foreach ( $attr as $name => $value ) {
			$html .= " $name=" . '"' . $value . '"';
		}

		$html .= ' />';
	}

	/**
	 * HTML img element representing an image attachment.
	 *
	 * @since 5.6.0
	 *
	 * @param string       $html          HTML img element or empty string on failure.
	 * @param int          $attachment_id Image attachment ID.
	 * @param string|int[] $size          Requested image size. Can be any registered image size name, or
	 *                                    an array of width and height values in pixels (in that order).
	 * @param bool         $icon          Whether the image should be treated as an icon.
	 * @param string[]     $attr          Array of attribute values for the image markup, keyed by attribute name.
	 *                                    See wp_get_attachment_image().
	 */
	return apply_filters( 'wp_get_attachment_image', $html, $attachment_id, $size, $icon, $attr );
}

wp_attachment image (картинки вложения)

Картинки

Миниатюры Вложения

8 комментов
    Войти