Отображение записей WP_Query из той же категории, что и текущая запись
На странице записи я пытаюсь отобразить список других записей из той же категории, что и исходная запись. Пока что у меня есть следующий код, но он не работает:
<?php
$args = array(
'post_type' => 'article',
'posts_per_page' => 5,
'post__not_in' => array( get_the_ID() ),
'category' => array( get_the_category() ),
'meta_query' => array(
array(
'key' => 'recommended_article',
'value' => '1',
'compare' => '=='
)
)
);
$query = new WP_Query( $args );
?>
<?php if( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post(); ?>
<a class="popup-article-picture" href="<?php the_permalink(); ?>" style="background-image: url('<?php the_post_thumbnail_url(); ?>');"></a>
<a class="popup-article-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php endwhile; endif; wp_reset_postdata(); ?>
Я нашел ответ:
<?php
// Получаем категории текущего поста
$cats = get_the_category();
// Аргументы для WP_Query
$args = array(
'post_type' => 'article', // Тип поста - article
'post__not_in' => array( get_the_ID() ), // Исключаем текущий пост
'posts_per_page' => 5, // Количество постов
'cat' => $cats[0]->term_id, // ID первой категории текущего поста
'meta_query' => array( // Мета-запрос
array(
'key' => 'recommended_article', // Ключ метаполя
'value' => '1', // Значение метаполя
'compare' => '==' // Оператор сравнения
)
)
);
// Создаем новый запрос
$query = new WP_Query( $args );
?>
<?php if( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post(); ?>
<!--HTML-->
<?php endwhile; endif; wp_reset_postdata(); ?>

Вы пытаетесь выполнить запрос к пользовательскому типу записи с названием article
. Используете ли вы стандартные категории WordPress для этого типа записи article
? Или вы зарегистрировали какую-либо пользовательскую таксономию для этого типа записи? Предполагаю, что вы используете стандартные категории WordPress для CPT
(пользовательского типа записи).
Первый шаг — получить текущую категорию на странице записи. Следующая функция вернет категории, связанные с записью, вне основного цикла:
get_the_category();
Она вернет массив объектов терминов. Из этого массива нужно получить slug (ярлык), чтобы передать его в запрос. Допустим, у нас только одна категория назначена для отдельной записи.
$category_obj = get_the_category();
$category = $category_obj[0]->slug;
Теперь вы можете использовать это в запросе для получения связанных записей:
$args = array(
'post_type' => 'article',
'posts_per_page' => 5,
'category' => $category,
'meta_query' => array(
array(
'key' => 'recommended_article',
'value' => '1',
'compare' => '=='
)
)
);
$query = new WP_Query( $args );
Если вы используете пользовательскую таксономию для этого типа записи, сообщите нам, и мы поможем вам с настройкой запроса для пользовательских таксономий.
