image_get_intermediate_size() WP 2.5.0

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

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

У масиві даних УРЛ картинки буде переданий, якщо параметр $size вказаний рядок.

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

Працює на основі:
wp_get_attachment_metadata()
Основа для:
image_downsize()
1 раз – 0.001427 сек
(дуже повільно) | 50000 разів – 1.51 сек
(швидко) |
PHP 7.1.5, WP 4.8.1

Хуки з функції

Повертає

Массив|false. false, якщо немає розміру і масив даних картинки, якщо розмір є:

Якщо $size передано рядок і знайдено точний відповідний розмір:
Array (
	[file] => setting2-120x14.png
	[width] => 120
	[height] => 14
	[mime-type] => image/png
	[path] => 2014/07/setting2-120x14.png
	[url] => http://wp-kama.ru/wp-content/uploads/2014/07/setting2-120x14.png
)

Коли не знайдено точний розмір, але знайдено найближче зображення більшого розміру:
Array (
	[file] => setting2-120x14.png
	[width] => 90
	[height] => 10
)

Використання

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


За замовчуванням: ‘thumbnail’

Приклади

0

#1 Приклад використання

Отримаємо дані зображення вкладення 4831, середнього (medium) розміру:

$intermediate = image_get_intermediate_size(4831, 'medium');
print_r ($ intermediate);

/*
Поверне:
Array
(
	[file] => setting2-120x14.png
	[width] => 120
	[height] => 14
	[mime-type] => image/png
	[path] => 2014/07/setting2-120x14.png
	[url] => http://wp-kama.ru/wp-content/uploads/2014/07/setting2-120x14.png
)
*/
0

#2 Вкажемо масив у параметр $size

Отримаємо дані зображення вкладення 4831, зазначеного розміру (тобто розмір може бути не зареєстрований):

$intermediate = image_get_intermediate_size(4831, array(90,90));
/*
поверне:
Array
(
	[file] => setting2-120x14.png
	[width] => 90
	[height] => 10
)
*/
0

#3 Виведемо картинку потрібного розміру, якщо вона є

У цьому прикладі ми виводимо картинку якщо вона є і напис “картинки немає”, якщо її немає. На відміну від image_downsize() , яка повертає УРЛ у будь-якому випадку:

function get_image_link_if_exists( $size ){
	global $post;

	// Отримаємо id мініатюри посту
	$thumbnail_id = get_post_thumbnail_id( $post->ID );

	// виводимо картинку якщо вона є
	$image = image_get_intermediate_size( $thumbnail_id, $size );
	if($image)
		echo '<img src="'. $image['url'] .'" alt="" width="'. $image['width'] .'" height="'. $image['height'] .'" />';
	else
		echo 'Малюнки немає';
}

get_image_link_if_exists('my_size');

список змін

З версії 2.5.0Введено.

Код image_get_intermediate_size() WP 6.0.2

function image_get_intermediate_size( $post_id, $size = 'thumbnail' ) {
	$imagedata = wp_get_attachment_metadata( $post_id );

	if ( ! $size || ! is_array( $imagedata ) || 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 ( (int) $data['width'] === (int) $size[0] && (int) $data['height'] === (int) $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 до original файлу.
				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 backward 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;
		}

		// Зберігає широкі і сильні ознаки до відповідних цінностей.
		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;
	}

	// Включити в повний файлсистема файлу в 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 output of image_get_intermediate_size()
	 *
	 * @ Since 4.4.0
	 *
	 * @see image_get_intermediate_size()
	 *
	 * @param array $data Зображення файлу relative path, width, and height on success. May also include
	 * file absolute path and URL.
	 * @param int $post_id 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).
	 */
	return apply_filters( 'image_get_intermediate_size', $data, $post_id, $size );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *