image_get_intermediate_size

Получает массив данных картинки-вложения указанного размера (thumbnail, medium …), если она существует. Возвращает false если картинки нет.

В параметре $size указывается зарегистрированный с помощью add_image_size() размер или уже существующие базовые размеры WordPress: thumb, thumbnail, medium, large, post-thumbnail. Также, $size может быть массивом: array(120, 50) – ширина и высота. Если этот размер совпадает с метаданными размера существующей картинки, то она будет использована. Если точного совпадения с размерами нет, то будет получена наиболее подходящая, большая про размеру картинка. Если большей по размеру картинки не существует, функция вернет false.

В массиве данных УРЛ картинки будет передан, если в параметр $size указана строка.

Если в $size вы используете массив, то очень желательно задуматься о том, чтобы зарегистрировать нужный размер с помощью add_image_size(), для того чтобы выводилась уменьшенная копия картинки. Это гораздо эффективнее, чем находить ближайший больший размер и затем уменьшать его до нужного размера в браузере.

Хуки из функции:
image_get_intermediate_size
Возвращает

false, если размера нет и массив данных картинки, если размер есть:

$image = image_get_intermediate_size( $post_id, $size );
$post_id(число) (обязательный)
ID вложения-картинки
$size(строка/массив)
Размер картинки, может быть строкой (зарегистрированный размер) или массивом ширина и высота: array(120,50).
По умолчанию: ‘thumbnail’

Примеры

#1 Пример использования

Получим данные картинки вложения 4831, среднего (medium) размера:

<?php
function image_get_intermediate_size( $post_id, $size = 'thumbnail' ) {
	if ( ! $size || ! is_array( $imagedata = wp_get_attachment_metadata( $post_id ) ) || empty( $imagedata['sizes'] )  ) {
		return false;
	}

	$data = array();

	// Find the best match when '$size' is an array.
	if ( is_array( $size ) ) {
		$candidates = array();

		if ( ! isset( $imagedata['file'] ) && isset( $imagedata['sizes']['full'] ) ) {
			$imagedata['height'] = $imagedata['sizes']['full']['height'];
			$imagedata['width']  = $imagedata['sizes']['full']['width'];
		}

		foreach ( $imagedata['sizes'] as $_size => $data ) {
			// If there's an exact match to an existing image size, short circuit.
			if ( $data['width'] == $size[0] && $data['height'] == $size[1] ) {
				$candidates[ $data['width'] * $data['height'] ] = $data;
				break;
			}

			// If it's not an exact match, consider larger sizes with the same aspect ratio.
			if ( $data['width'] >= $size[0] && $data['height'] >= $size[1] ) {
				// If '0' is passed to either size, we test ratios against the original file.
				if ( 0 === $size[0] || 0 === $size[1] ) {
					$same_ratio = wp_image_matches_ratio( $data['width'], $data['height'], $imagedata['width'], $imagedata['height'] );
				} else {
					$same_ratio = wp_image_matches_ratio( $data['width'], $data['height'], $size[0], $size[1] );
				}

				if ( $same_ratio ) {
					$candidates[ $data['width'] * $data['height'] ] = $data;
				}
			}
		}

		if ( ! empty( $candidates ) ) {
			// Sort the array by size if we have more than one candidate.
			if ( 1 < count( $candidates ) ) {
				ksort( $candidates );
			}

			$data = array_shift( $candidates );
		/*
		 * When the size requested is smaller than the thumbnail dimensions, we
		 * fall back to the thumbnail size to maintain backwards compatibility with
		 * pre 4.6 versions of WordPress.
		 */
		} elseif ( ! empty( $imagedata['sizes']['thumbnail'] ) && $imagedata['sizes']['thumbnail']['width'] >= $size[0] && $imagedata['sizes']['thumbnail']['width'] >= $size[1] ) {
			$data = $imagedata['sizes']['thumbnail'];
		} else {
			return false;
		}

		// Constrain the width and height attributes to the requested values.
		list( $data['width'], $data['height'] ) = image_constrain_size_for_editor( $data['width'], $data['height'], $size );

	} elseif ( ! empty( $imagedata['sizes'][ $size ] ) ) {
		$data = $imagedata['sizes'][ $size ];
	}

	// If we still don't have a match at this point, return false.
	if ( empty( $data ) ) {
		return false;
	}

	// include the full filesystem path of the intermediate file
	if ( empty( $data['path'] ) && ! empty( $data['file'] ) && ! empty( $imagedata['file'] ) ) {
		$file_url = wp_get_attachment_url($post_id);
		$data['path'] = path_join( dirname($imagedata['file']), $data['file'] );
		$data['url'] = path_join( dirname($file_url), $data['file'] );
	}

	/**
	 * Filters the output of image_get_intermediate_size()
	 *
	 * @since 4.4.0
	 *
	 * @see image_get_intermediate_size()
	 *
	 * @param array        $data    Array of file relative path, width, and height on success. May also include
	 *                              file absolute path and URL.
	 * @param int          $post_id The post_id of the image attachment
	 * @param string|array $size    Registered image size or flat array of initially-requested height and width
	 *                              dimensions (in that order).
	 */
	return apply_filters( 'image_get_intermediate_size', $data, $post_id, $size );
}

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


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

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