Добавляем похожие записи без плагина

Для того, чтобы создать список похожих записей в WordPress существует много плагинов, например,  неплохой Wp-Thumbie. Но часто в громоздких плагинах нет необходимости, ну разве что для совсем новичков (кстати, неплохой WordPress форум для тех, кто только знакомится с движком).

Достаточно открыть файл single.php (можно через меню Внешний вид -> Редактор) и вставить один из кодов на выбор в том месте, где хотите видеть список связанных записей.

Первый код работает на основе поиска статей по совпадающим меткам.

<?php
$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'=>5 // Количество записей для показа.
	);
	$my_query = new wp_query($args);
	if( $my_query->have_posts() ) {
		echo '<h3>Похожие статьи</h3><ul>';
		while ($my_query->have_posts()) {
			$my_query->the_post();
		?>
			<li><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка: <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
		<?php
		}
		echo '</ul>';
	}
}
?>

Если же нужно сделать поиск похожих записей по рубрикам, используем такой код.


<?php
$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'=>5 // Количество записей для показа.
	);
	$my_query = new wp_query($args);
	if( $my_query->have_posts() ) {
		echo '<h3>Похожие статьи</h3><ul>';
		while ($my_query->have_posts()) {
			$my_query->the_post();
		?>
			<li><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка: <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
		<?php
		}
		echo '</ul>';
	}
}
?>

Альтернативный код с выводом рандомных похожих записей, а не последних, на основе меток (были сообщения что orderby=rand не работает с плагином WP Sticky).

<?php
//5 рандомных записей
$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'=>5,
    'orderby' => 'rand'
   );
  $my_query = new WP_Query($args);
  if( $my_query->have_posts() ) {
		echo '<h3>Похожие статьи</h3><ul>';
    while ($my_query->have_posts()) : $my_query->the_post(); ?>
      <li><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка: <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
      <?php
    endwhile;
  }
echo '</ul>';
wp_reset_query();
}
?>

Мне пригодился именно второй вариант, когда для записей из отдельной рубрики («Биографии»), нужно было выводить все публикации с сайта, которые есть по данной персоне (для которой тоже заведена рубрика), соответственно за исключением статей из самой рубрики «Биографии». К этому коду я добавила еще после $args=array (


'cat' =>-ID,

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

Также, по-желанию эти списки можно как угодно оформлять, добавлять любые стили, миниатюры или анонсы на статьи.

Заметное преимущество такого метода — большая гибкость без необходимости использования посторонних плагинов и вникания в чужие коды.