Не удается получить или отобразить миниатюру записи в WordPress.

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

Я работаю над плагином для WordPress и пытаюсь отобразить/получить миниатюру поста ниже поста в разделе “Похожие посты”. Я пробовал много вещей, которые должны работать, но не для меня… вот код (в моем файле plugin.php):

add_theme_support( 'post-thumbnails', array( 'post', 'page' ) );

if ( has_post_thumbnail() ) {
    echo ('есть миниатюра');
    echo get_the_post_thumbnail(get_the_ID(), "thumbnail"); // ничего
    echo get_the_post_thumbnail(); // ничего
    echo var_dump(get_the_post_thumbnail(get_the_ID(), "thumbnail")); //string '' (length=0)
    echo var_dump(get_the_post_thumbnail()); //string '' (length=0)
    the_post_thumbnail('thumbnail'); // ничего
    the_post_thumbnail(); // ничего
}
else {
    echo ('нет миниатюры');
}

Сначала я думал, что у моего поста нет миниатюры, но мой первый echo вернул “есть миниатюра”, и все остальное ничего не возвращает… так что я не понимаю… что не так?

Спасибо

Редактировать:

Вот текущий полный код в моем файле plugin.php:

function Similar_Article ($content) {
    if (is_single() || is_page()) {
        the_post();
        $similar_to_add = '';
        $id = get_the_ID();
        $content_and_similar = $content . '<br><br>'; //пробелы между постом и похожими постами

        /* много методов вызвано для поиска моих похожих постов */

        if (has_post_thumbnail()){
            $content_and_similar .= get_the_post_thumbnail(); // это работает
        }
        else {
            $imageData = wp_get_attachment_image_src(get_post_thumbnail_id ( $id ), 'thumbnail'); 
            $content_and_similar .= '<img src="https://wordpress.stackexchange.com/questions/269810/".$imageData[0]."https://wordpress.stackexchange.com/questions/269810/">';
        }

        $content_and_similar .= $similar_to_add;
        return $content_and_similar;
    }
    else {
        return $content;
    }
}

add_filter( 'the_content', 'Similar_Article' );

моя функция работает, если миниатюра есть, но ничего не отображает, если миниатюры нет…

Обратите внимание, has_post_thumbnail() не только проверяет, есть ли у поста представленное изображение, но также проверяет, есть ли изображение в самом посте. Есть цитата из Справки по коду WordPress:

Стоит отметить, что has_post_thumbnail() не просто проверяет
на наличие представленного изображения, как предлагает примечание, добавленное пользователями Codex. Если
пост не содержит определенного представленное изображения, но в его содержимом есть изображение,
эта функция все равно вернет TRUE.

Я предлагаю вам использовать if (get_the_post_thumbnail() != '') вместо if (has_post_thumbnail()).

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

Проблема с получением миниатюры поста в WordPress

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

Анализ предоставленного кода

Исходя из вашего кода, вы используете следующие функции:

  1. add_theme_support(‘post-thumbnails’, array(‘post’, ‘page’)); – это правильное добавление поддержки миниатюр для постов и страниц. Однако убедитесь, что этот вызов находится в правильном контексте, например, в функции functions.php вашей темы или в инициализации вашего плагина.

  2. has_post_thumbnail() – эта функция проверяет, есть ли миниатюра, но, как вы отметили, она может возвращать TRUE, если в содержимом поста есть изображение. Это может быть одной из причин, почему последующие вызовы для получения миниатюры не работают.

  3. get_the_post_thumbnail() – если он возвращает пустую строку (string ”), это значит, что для данного поста не задана миниатюра.

Возможные решения

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

    if (!empty(get_the_post_thumbnail(get_the_ID()))) {
       echo get_the_post_thumbnail(get_the_ID(), 'thumbnail');
    } else {
       echo 'Миниатюра отсутствует';
    }
  2. Использование get_post_thumbnail_id():
    Используйте функцию get_post_thumbnail_id(), чтобы получить ID миниатюры, а затем используйте его для получения информации о миниатюре:

    $thumbnail_id = get_post_thumbnail_id($id);
    if ($thumbnail_id) {
       $image_attributes = wp_get_attachment_image_src($thumbnail_id, 'thumbnail');
       if ($image_attributes) {
           $content_and_similar .= '<img src="' . esc_url($image_attributes[0]) . '" alt="' . esc_attr(get_the_title($thumbnail_id)) . '">';
       }
    } else {
       echo 'Миниатюра отсутствует';
    }
  3. Детали вашего фильтра:
    Если ваш фильтр add_filter('the_content', 'Similar_Article'); срабатывает до того, как загружается контент с миниатюрой, это может вызвать проблемы с отображением. Убедитесь, что функция вызывается в нужное время в процессе загрузки страницы.

  4. Проверка правильности SID:
    Убедитесь, что ваша функция Similar_Article() действительно вызывается для нужных постов и страниц. Возможно, стоит добавить дополнительные проверки на тип контента.

Заключение

Проблема с получение миниатюры поста может быть вызвана несколькими обстоятельствами, включая неправильные проверки и условия. Переход на более точные проверки, такие как использование get_the_post_thumbnail() и проверка её на пустоту, а также дополнительная информация о миниатюрах через get_post_thumbnail_id() и wp_get_attachment_image_src() могут помочь решить вашу проблему.

Помните также о SEO, проверяя правильное выполнение esc_url() и esc_attr(), чтобы обеспечить безопасность и корректное отображение медиафайлов.

Если все предложенные методы не помогают, стоит проверить наличие конфликтов с другими плагинами или темами, которые могут мешать нормальной работе миниатюр.

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

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