Получить featured image как объект
Я хочу получить featured image записи в виде объекта (array
), чтобы иметь доступ ко всем размерам изображения.
Функция get_the_post_thumbnail()
не предоставляет такой возможности, есть какие-то идеи?

Сначала получаем зарегистрированные размеры изображений и ID миниатюры записи:
$sizes = get_intermediate_image_sizes();
$post_thumbnail_id = get_post_thumbnail_id();
Перебираем зарегистрированные размеры и создаем массив:
$images = array();
foreach ( $sizes as $size ) {
$images[] = wp_get_attachment_image_src( $post_thumbnail_id, $size );
}
Объединяем в функцию для размещения в файле functions.php:
function get_all_image_sizes($attachment_id = 0) {
$sizes = get_intermediate_image_sizes();
if(!$attachment_id) $attachment_id = get_post_thumbnail_id();
$images = array();
foreach ( $sizes as $size ) {
$images[] = wp_get_attachment_image_src( $attachment_id, $size );
}
return $images;
}
Использование:
$featured_image_sizes = get_all_image_sizes();

Спасибо, passatgt. То есть нет более простого способа получить объект из миниатюры записи? Они действительно должны добавить это как стандартную функцию.

Ну, обычно требуется только один размер. Можно использовать Advanced Custom Fields с полем для изображения, которое вернет полный массив со всеми размерами, но если поместить функцию, которую я написал, в ваш functions.php, это не так сложно.

Это устарело, но приведенный выше ответ не совсем полный. Чтобы правильно получить все размеры изображений со всеми атрибутами, вам также нужно получить объект вложения.
Примерно так:
if ( has_post_thumbnail() ) {
$thumb = array();
$thumb_id = get_post_thumbnail_id();
// сначала получаем всю информацию об изображении... заголовок/описание/альтернативный текст и т.д.
$args = array(
'post_type' => 'attachment',
'include' => $thumb_id
);
$thumbs = get_posts( $args );
if ( $thumbs ) {
// теперь создаем новый массив
$thumb['title'] = $thumbs[0]->post_title;
$thumb['description'] = $thumbs[0]->post_content;
$thumb['caption'] = $thumbs[0]->post_excerpt;
$thumb['alt'] = get_post_meta( $thumb_id, '_wp_attachment_image_alt', true );
$thumb['sizes'] = array(
'full' => wp_get_attachment_image_src( $thumb_id, 'full', false )
);
// добавляем дополнительные размеры изображений
foreach ( get_intermediate_image_sizes() as $size ) {
$thumb['sizes'][$size] = wp_get_attachment_image_src( $thumb_id, $size, false );
}
} // end if
// выводим изображение с размером 'custom-size'
echo '<img src="' . $thumb['sizes']['custom-size'][0] . '" alt="' . $thumb['alt'] . '" title="' . $thumb['title'] . '" width="' . $thumb['sizes']['custom-size'][1] . '" height="' . $thumb['sizes']['custom-size'][2] . '" />';
} // end if

Еще одно обновление спустя несколько лет. Полагаю, вы уже разобрались ;). Но для тех, кто хочет сделать это и получить результат, совместимый с, скажем, объектами изображений ACF и позволяющий легко заполнять источники (sourcesets). Вы можете добавить такой код в functions.php:
// Получает все размеры изображения в виде массива, аналогично объекту ACF
function get_all_image_sizes($attachment_id = 0) {
// Получаем все промежуточные размеры изображений
$sizes = get_intermediate_image_sizes();
// Если ID вложения не указан, получаем ID миниатюры поста
if(!$attachment_id) $attachment_id = get_post_thumbnail_id();
$images = array();
// Для каждого размера получаем URL изображения
foreach ( $sizes as $size ) {
$images[$size] = wp_get_attachment_image_src( $attachment_id, $size )[0];
}
// Создаем объект изображения с массивом размеров
$imageObject = array(
'sizes' => $images
);
return $imageObject;
}
Затем можно использовать функцию следующим образом:
// Получаем ID миниатюры поста
$thumbID = get_post_thumbnail_id();
// Получаем все размеры изображения
$image = get_all_image_sizes($thumbID);
// Формируем HTML-код изображения с выбранным размером
$html = '<img src="'. $image['sizes']['large'] .'" alt="Альтернативный текст изображения" title="Заголовок изображения">';
