Получить featured image как объект

6 нояб. 2014 г., 09:38:44
Просмотры: 15.1K
Голосов: 5

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

Функция get_the_post_thumbnail() не предоставляет такой возможности, есть какие-то идеи?

0
Все ответы на вопрос 3
3

Сначала получаем зарегистрированные размеры изображений и 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();
6 нояб. 2014 г. 09:59:26
Комментарии

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

Staffan Estberg Staffan Estberg
6 нояб. 2014 г. 10:06:16

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

passatgt passatgt
6 нояб. 2014 г. 10:11:02

Причина, по которой мне нужны все размеры, в том, что я использую Picturefill для адаптивных изображений. WP действительно нужно решить этот вопрос на уровне системы. Спасибо за ваши предложения.

Staffan Estberg Staffan Estberg
6 нояб. 2014 г. 10:12:58
0

Это устарело, но приведенный выше ответ не совсем полный. Чтобы правильно получить все размеры изображений со всеми атрибутами, вам также нужно получить объект вложения.

Примерно так:

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
30 сент. 2016 г. 21:05:37
0

Еще одно обновление спустя несколько лет. Полагаю, вы уже разобрались ;). Но для тех, кто хочет сделать это и получить результат, совместимый с, скажем, объектами изображений 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="Заголовок изображения">';
13 июл. 2020 г. 09:41:17