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

Как вывести похожие по тегам посты из определенной категории | n-wp.ru
Код, выводящий похожие посты по тегам и из той же категории, что и текущий пост, либо из других, указанных вами, категорий.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

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

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

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

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

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

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

В файл 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, в то место, где нужно вывести список похожих постов, нужно вставить:

<div>
  <!-- если это категория Вопросы, то выводятся похожие посты только из категории Вопросы-->
        
     // 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=""></a>
      <!-- /тут заканчивается код, отвечающий за вид ссылки-->
    
    
  
</div>

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

[info txt=»Так как я не программист, то за точность и оптимальность приведенного кода не ручаюсь (у меня в блоге он прекрасно работает).
Буду благодарен тем, кто подскажет, как автоматизировать формирование массива категорий для переменной $categories.»]
Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий