Как отобразить связанные записи из одной категории в single.php

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

Как отобразить связанные посты из той же категории в single.php. Я пробовал, но это не работало.

В вашем шаблоне single.php вам нужно загрузить термины категории и затем выполнить запрос, чтобы получить другие посты. В моем примере я загружаю посты из одной категории. У нас установлен плагин SEO для WordPress, который позволяет выбрать основную категорию, если вы решите выбрать несколько.

$related_articles = array();
$categories = get_the_category();

if($categories) {
   $category_id = $categories[0]->term_id;

   if(count($categories) > 1 && class_exists('WPSEO_Primary_Term')) {
      $primary_term = new WPSEO_Primary_Term('category', get_the_id());
      $category_id  = $primary_term->get_primary_term();
   }

   $related_articles = get_posts(array(
      'category'    => $category_id,
      'exclude'     => $post->ID,
      'numberposts' => 3,
      'order'       => 'DESC',
      'orderby'     => 'date',
      'post_status' => 'published',
      'post_type'   => 'post'
   ));
}

Вы можете затем пройтись по связанным постам, если они есть:

<?php if($related_articles): ?>
   <section class="related-articles">
      <?php foreach($related_articles as $post): ?>
         <?php setup_postdata($post); ?>
         <article>
            <h2><?php the_title(); ?></h2>
         </article>
      <?php endforeach; ?>
      <?php wp_reset_postdata(); ?>
   </section>
<?php endif; ?>

Надеюсь, это поможет

Чтобы отобразить связанные посты из той же категории в представлении одного поста single.php

// Получить ID текущего поста
$current_post_id = get_the_ID();

// Получить категории текущего поста
$categories = get_the_category($current_post_id);

// Получить первую категорию (вы можете изменить эту логику в зависимости от ваших нужд)
if (!empty($categories)) {
    $category_id = $categories[0]->term_id;

    // Пользовательский запрос для получения связанных постов из той же категории
    $related_args = array(
        'category__in' => array($category_id),
        'post__not_in' => array($current_post_id),
        'posts_per_page' => 3, // Настройте количество связанных постов для отображения
        'orderby' => 'rand', // Отображать связанные посты в случайном порядке
    );

    $related_query = new WP_Query($related_args);

    // Вывод связанных постов
    if ($related_query->have_posts()) {
        echo '<h3>Связанные посты</h3>';
        echo '<ul>';
        while ($related_query->have_posts()) {
            $related_query->the_post();
            echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
        }
        echo '</ul>';
    }

    // Восстановить оригинальные данные поста
    wp_reset_postdata();
}

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

Для отображения связанных постов из одной категории в файле single.php в WordPress, необходимо использовать встроенные функции WordPress для работы с постами и категориями. Этот процесс включает в себя получение текущего поста, извлечение его категорий, выполнение запроса на извлечение связанных постов, а затем вывод этих постов на экран.

Далее приведен пошаговый процесс, как это сделать корректно:

Шаг 1: Получение текущего поста и его категорий

Сначала нужно получить ID текущего поста и извлечь его категории.

// Получаем ID текущего поста
$current_post_id = get_the_ID();

// Получаем категории текущего поста
$categories = get_the_category($current_post_id);

Шаг 2: Извлечение ID первой категории

Для демонстрации связанных постов мы используем первую категорию. Убедитесь, что у поста есть категории.

if (!empty($categories)) {
    $category_id = $categories[0]->term_id; // Извлекаем ID первой категории

Шаг 3: Запрос на получение связанных постов

Теперь мы создадим новый запрос к базе данных для извлечения связанных постов, исключив текущий пост из результатов.

    // Настройки запроса для получения связанных постов
    $related_args = array(
        'category__in' => array($category_id), // Запрашиваем посты из той же категории
        'post__not_in' => array($current_post_id), // Исключаем текущий пост
        'posts_per_page' => 3, // Количество постов для отображения
        'orderby' => 'rand', // Случайный порядок постов
        'post_status' => 'publish', // Извлекаем только опубликованные посты
    );

    // Выполняем запрос
    $related_query = new WP_Query($related_args);

Шаг 4: Вывод связанных постов

Если запрос вернул результаты, нужно отобразить их на экране.

    // Проверяем, есть ли найденные посты
    if ($related_query->have_posts()) {
        echo '<h3>Связанные посты</h3>';
        echo '<ul>';
        while ($related_query->have_posts()) {
            $related_query->the_post(); // Подготавливаем пост для вывода
            echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>'; // Выводим заголовок и ссылку на пост
        }
        echo '</ul>';
    }

    // Восстанавливаем оригинальные данные поста
    wp_reset_postdata();
}

Полный код

Вот как выглядит полный код для отображения связанных постов в single.php:

$current_post_id = get_the_ID();
$categories = get_the_category($current_post_id);

if (!empty($categories)) {
    $category_id = $categories[0]->term_id;

    $related_args = array(
        'category__in' => array($category_id),
        'post__not_in' => array($current_post_id),
        'posts_per_page' => 3,
        'orderby' => 'rand',
        'post_status' => 'publish',
    );

    $related_query = new WP_Query($related_args);

    if ($related_query->have_posts()) {
        echo '<h3>Связанные посты</h3>';
        echo '<ul>';
        while ($related_query->have_posts()) {
            $related_query->the_post();
            echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
        }
        echo '</ul>';
    }

    wp_reset_postdata();
}

Заключение

Данный подход позволяет легко и эффективно отображать связанные посты из одной категории на странице просмотра отдельного поста (single.php). Использование функции WP_Query для создания запроса к базе данных дает вам большую гибкость в управлении выводом постов. Важно также помнить о SEO-оптимизации: избегайте дублирования контента и уделяйте внимание метаданным при отображении связанных постов.

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

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