Получение изображения для страницы блога, а не изображения поста

Вопрос или проблема

У меня есть страница под названием “Блог”, которая использует “Шаблон по умолчанию” (index.php). На ней установлено изображение для анонса. Я хочу отобразить это изображение, но когда я использую get_post_thumbnail_id(), внутри или вне цикла, я получаю миниатюру первой записи в моем блоге, а не той, что на странице “Блог”.

На всякий случай в Настройки > Чтение, Страница записей установлена как “Блог”.

Этот код может быть тем, что вам нужно. Он проходит через шаблоны страниц, чтобы получить изображение для анонса. Если вы добавите его вне цикла в свой шаблон page.php (или index.php, в зависимости от вашей темы), он должен получить изображение для анонса страницы, а не записей.

<?php
global $post;
    if ( isset($post) ) {

        //получить предков
        $familyTree = get_ancestors($post->ID,'page');
        array_unshift( $familyTree, $post->ID ); //добавить текущую страницу в начало списка

        //пройтись по семейному дереву, пока не найдете результат или не исчерпаете массив
        $featuredImage="";
        foreach ( $familyTree as $family_postid ) {
            if ( has_post_thumbnail( $family_postid ) ) {
                $featuredImage = get_the_post_thumbnail( $family_postid, 'full' );
                break;
            }
        }

        // если у страницы есть изображение для анонса, то показать его
        echo ( $featuredImage ? $featuredImage : "" );

    }    
?>        

Вы должны добавить это вне вашего цикла

Когда вы находитесь на странице блога, функция get_post_thumbnail_id() возвращает id миниатюры поста первой записи (как вы уже выяснили).

Чтобы получить правильную миниатюру поста на странице блога, вам нужно сделать что-то вроде этого:

$thumbnail_id = NULL;
if(is_home()){  //страница блога?
   $blog_page_id = (int)get_option('page_for_posts');
   if(has_post_thumbnail($blog_page_id)){
      $thumbnail_id = get_post_thumbnail_id(get_option('page_for_posts'));
   }
} elseif(is_singular()) { //все 'единичные' записи, такие как пост, страница, пользовательский тип записи...
    if(has_post_thumbnail()){
        $thumbnail_id = get_post_thumbnail_id();
    }
} else {  //все остальное, такое как 404, архивы категорий, поиск и т.д.
   //вставьте резервный вариант здесь
}
if(!$thumbnail_id()){
   //вставьте другой резервный вариант здесь
}
$thumbnail = get_attachment_image($thumbnail_id,'post-thumbnail');
$thumbnail_src = wp_get_attachment_image_src($thumbnail_id,'post-thumbnail')[0];

Удачной кодировки!

Сначала найдите id страницы постов и передайте id в функцию wp_get_attachment_url(get_post_thumbnail_id()).

$blog_page_image = wp_get_attachment_url( get_post_thumbnail_id(get_option( 'page_for_posts' )) );

Надеюсь, это решит вашу проблему.

Ответ или решение

Решение проблемы с получением изображения для страницы блога в WordPress

При работе с WordPress, особенно когда речь идет о отображении изображений на страницах, важно понимать, как правильно извлечь данные для различных типов контента. Ваша ситуация заключается в том, что вам нужно отобразить изображение, установленное для страницы "Блог", а не миниатюры первых постов в блоге. Давайте рассмотрим, как можно решить эту задачу.

Понимание структуры

В WordPress есть два основных типа контента: страницы и посты. Вы можете использовать функции, такие как get_post_thumbnail_id(), чтобы получить ID миниатюры поста. Однако если вы находитесь на странице блога, эта функция будет возвращать ID изображения первого поста, а не ID миниатюры вашей страницы "Блог".

Способы решения

Чтобы получить изображение, установленное для страницы блога, вам нужно будет сделать следующее:

  1. Определение ID страницы блога: Используйте функцию get_option('page_for_posts'), чтобы получить ID страницы, которая настроена в качестве блога.

  2. Проверка наличия миниатюры: Проверьте, установлена ли миниатюра для страницы блога, используя has_post_thumbnail().

  3. Получение URL миниатюры: Если миниатюра установлена, получите её ID с помощью get_post_thumbnail_id() и затем используйте wp_get_attachment_url() для получения URL изображения.

Пример кода

$thumbnail_id = null;

if (is_home()) {  // проверяем, находимся ли мы на странице блога
    $blog_page_id = (int)get_option('page_for_posts');
    if (has_post_thumbnail($blog_page_id)) {
        $thumbnail_id = get_post_thumbnail_id($blog_page_id);
    }
} elseif (is_singular()) { // для единичных постов, страниц и т.д.
    if (has_post_thumbnail()) {
        $thumbnail_id = get_post_thumbnail_id();
    }
}

// Фallback для других случаев, если миниатюра не найдена
if (!$thumbnail_id) {
    // Можно установить изображение по умолчанию или оставить пустым
}

// Получаем URL миниатюры
$thumbnail_url = wp_get_attachment_url($thumbnail_id);

Рекомендации по использованию

  • Помещайте код вне главного цикла, чтобы он выполнялся при загрузке страницы, а не для каждого поста.
  • Заботьтесь о производительности: Если на вашем блоге много постов, использование различных функций для получения информации может потребовать дополнительных ресурсов. Профилируйте код, если это необходимо.

Подведение итогов

Следуя приведенным рекомендациям и используя предложенный код, вы сможете получить изображение, установленное для страницы "Блог". Это улучшит визуальное представление вашего сайта и повысит его привлекательность для посетителей. Обязательно протестируйте изменения, чтобы убедиться, что они работают должным образом в различных сценариях использования WordPress.

Оцените материал
Добавить комментарий

Капча загружается...