Вопрос или проблема
Как отобразить связанные посты из той же категории в 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-оптимизации: избегайте дублирования контента и уделяйте внимание метаданным при отображении связанных постов.