Задача: имеется запись, например, статья из блога. Необходимо на странице записи выводить «похожие» публикации. Понятие «похожести» в данном случае — относительное, так как выводить мы будем записи, находящие на одном уровне вложенности. Рассмотрим пример вывода прочих записей из той же категории и вывод записей из кастомного типа публикаций.
<?
$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 нужно указать символьный код (таксономию) вашего типа записей.
работает, спасибо за сэкономленное время!