Задача: имеется запись, например, статья из блога. Необходимо на странице записи выводить «похожие» публикации. Понятие «похожести» в данном случае — относительное, так как выводить мы будем записи, находящие на одном уровне вложенности. Рассмотрим пример вывода прочих записей из той же категории и вывод записей из кастомного типа публикаций.
<? $categories = get_the_category($post->ID); if ($categories) { $category_ids = array(); foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; $args=array( 'category__in' => $category_ids, 'post__not_in' => array($post->ID), 'showposts'=>6, 'order' => 'ASC'); $my_query = new wp_query($args); if( $my_query->have_posts() ) { while ($my_query->have_posts()) { $my_query->the_post(); ?> <div><a href="<? echo the_permalink(); ?>"><? echo the_title(); ?></a></div> <? } } wp_reset_query(); } ?>
Логика работы следующая: с помощью функции get_the_category
получаем данные о категории, в которой находится пост. Дальнейшая фильтрация данных происходит в $args
.
category__in
— вывод записей только из определенных категорий, которые мы уже определили выше.
post__not_in
— исключает из списка нашу текущую запись.
showposts
— количество выводимых записей.
order
— направление сортировки.
В данном примере структура хранения данных несколько иная: материалы хранятся в кастомном типе записей, рубрики — отсутствуют.
<? $args = array( 'post_type'=> 'do', 'post__not_in' => array($post->ID), 'showposts'=> 6, 'order' => 'ASC' ); $the_query = new WP_Query( $args ); if($the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <div><a href="<? echo the_permalink(); ?>"><? echo the_title(); ?></a></div> <? endwhile; wp_reset_postdata(); else: endif; ?>
Механизм схожий и даже чуть проще, так как нам не требуется получать рубрику текущей записи. В post_type
нужно указать символьный код (таксономию) вашего типа записей.
работает, спасибо за сэкономленное время!