image_downsize

Получает массив данных картинки указанного размера: УРЛ, ширина и высота картинки-вложения.

Эта функция является ядром для wp_get_attachment_image_src(). Только ей нельзя передать третий параметр $icon. Она получает УРЛ и размеры именно вложения, которое является картинкой.

Получает УРЛ оригинальной картинки или её уменьшенной копии. Функция не создает уменьшенную копию картинки, а лишь получает УРЛ готовой уменьшенной картинки наиболее подходящей под указанные размеры. Если указаны произвольные размеры в массиве, подбирает подходящую картинку и пропорциональные ей размеры. См. примеры.

✈ 1 раз = 0.001024с = очень медленно | 50000 раз = 6.16с = быстро PHP 7.0.8, WP 4.6
Хуки из функции:
image_downsize
Возвращает

Массив с данными о картинке:

image_downsize( $id, $size );
$id(число) (обязательный)
ID вложения-картинки, данные которой нужно получить.
$size(строка)

Размер картинки, данные о которой нужно получить. Отличаться будет ссылка. В этом параметре можно указывать предусмотренные в WordPress размеры: thumbnail, medium, large или full.

Также, можно указать размер в массиве в виде двух элементов (ширина, высота): array(32,32). В этом случае будет подобран наиболее подходящий размер из имеющихся, затем картинка будет сжата/растянута до указанных размеров.

С версии 2.5. этот параметр не влияет на размер медиа иконок (иконок для файлов), они всегда показываются в оригинальном размере.

По умолчанию: ‘medium’

Примеры

#1 Функция получения УРЛ картинки среднего размера

Давайте напишем функцию аналогичную которая будет получать средний (medium) размер картинки-вложения, ID которой мы укажем в параметре $id:

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

	/**
	 * Filters whether to preempt the output of image_downsize().
	 *
	 * Passing a truthy value to the filter will effectively short-circuit
	 * down-sizing the image, returning that value as output instead.
	 *
	 * @since 2.5.0
	 *
	 * @param bool         $downsize Whether to short-circuit the image downsize. Default false.
	 * @param int          $id       Attachment ID for image.
	 * @param array|string $size     Size of image. Image size or array of width and height values (in that order).
	 *                               Default 'medium'.
	 */
	if ( $out = apply_filters( 'image_downsize', false, $id, $size ) ) {
		return $out;
	}

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

	// If the file isn't an image, attempt to replace its URL with a rendered image from its meta.
	// Otherwise, a non-image type could be returned.
	if ( ! $is_image ) {
		if ( ! empty( $meta['sizes'] ) ) {
			$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;
		}
	}

	// try for a new style intermediate size
	if ( $intermediate = image_get_intermediate_size($id, $size) ) {
		$img_url = str_replace($img_url_basename, $intermediate['file'], $img_url);
		$width = $intermediate['width'];
		$height = $intermediate['height'];
		$is_intermediate = true;
	}
	elseif ( $size == 'thumbnail' ) {
		// fall back to the old thumbnail
		if ( ($thumb_file = wp_get_attachment_thumb_file($id)) && $info = getimagesize($thumb_file) ) {
			$img_url = str_replace($img_url_basename, wp_basename($thumb_file), $img_url);
			$width = $info[0];
			$height = $info[1];
			$is_intermediate = true;
		}
	}
	if ( !$width && !$height && isset( $meta['width'], $meta['height'] ) ) {
		// any other type: use the real image
		$width = $meta['width'];
		$height = $meta['height'];
	}

	if ( $img_url) {
		// we have the actual image size, but might need to further constrain it if content_width is narrower
		list( $width, $height ) = image_constrain_size_for_editor( $width, $height, $size );

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

}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *