Как вывести похожие по тегам посты из определенной категории

Как вывести похожие по тегам посты из определенной категории | n-wp.ru

Я в очередной раз приступил к изобретению велосипеда. Скорее всего уже есть плагин, который делает то, что я задумал, но мне интересно самому в этом покопаться. Если вы посмотрите в конец поста в этом блоге, то увидите список похожих записей.

Как вывести похожие по тегам посты из определенной категории

Раньше в нем были четыре последних поста, совпадающие по первому тегу с текущим постом. В принципе, выборка нескольких постов с такими же тегами, что и у текущего, дает хорошую перелинковку между страницами схожей тематики. Хорошую, но не всегда точную.

Например, между постами, размещенными в категории Акции и в категории Плагины есть большая разница. В категорию Акции попадают посты, относящиеся к работе этого блога: проводимые в нем конкурсы, нововведения, объявления, и прочее. В категории же Плагины публикуются обзоры плагинов. Даже если посты из этих категорий и будут иметь одинаковые теги, все же их нельзя с уверенностью назвать похожими. По-настоящему похожими будут посты с одинаковыми тегами из той же самой категории.

Поэтому я поставил задачу сделать код, который бы выводил список похожих по тегам постов из той же категории, что и текущий пост, либо из тех категорий, которые я укажу (например, для поста из категории Настройки будет актуален список похожих постов из категории Настройки и категории Плагины). Если вам нужен вывод похожих по тегам постов из одной категории (или нескольких указанных), то можете использовать нижеприведенный код.

За основу я взял код из поста Как вывести список похожих постов без плагинов (по тегам) и изменил его, добавив предварительное ограничение по категориям.

В файл functions.php нужно добавить:

function mam_posts_join ($join) {
   global $mam_global_join;
   if ($mam_global_join) $join .= " $mam_global_join";
   return $join;
}
add_filter('posts_join','mam_posts_join');

В файл single.php, в то место, где нужно вывести список похожих постов, нужно вставить:

// 28 - это ID категории Вопросы term_relationships tr ON (tr.object_id = $wpdb->posts.ID) JOIN $wpdb->term_taxonomy tt ON (tt.term_taxonomy_id = tr.term_taxonomy_id AND tt.taxonomy = 'category' AND tt.term_id in ($categories))"; $tagargs = array('categories' => $categories); $tags = wp_get_post_tags($post->ID); if($tags): $tag_ids = array(); foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id; $args=array( 'tag__in' => $tag_ids, 'post__not_in' => array($post->ID), 'showposts'=> 4, //количество выводимых постов 'caller_get_posts'=> 1, //начиная с первого поста 'orderby'=> rand //при обновлении страницы выведутся другие посты, выбранные случайным образом ); $rp_query = new wp_query($args); endif; if($rp_query): if($rp_query->have_posts()) ?> have_posts()): $rp_query->the_post(); ?> <a title="" href="">

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

[info txt=”Так как я не программист, то за точность и оптимальность приведенного кода не ручаюсь (у меня в блоге он прекрасно работает).
Буду благодарен тем, кто подскажет, как автоматизировать формирование массива категорий для переменной $categories.”]
Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

Оставьте первый комментарий

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*