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

09.06.2011

Добрый день, сегодня опять поговорим о WordPress, а конкретнее — о таком функционале, как похожие записи. Штука весьма нужная как для SEO(внутренняя перелинковка), так и для удержания пользователя у вас на блоге. Есть куча плагинов для реализации этой фичи, но сделанное своими руками приятнее. Поэтому — никаких плагинов, только чистый 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, // количество записей для показа
	'caller_get_posts'=>1
);
$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>';
}
}?>

В комментарии я написал, где можно поменять количество записей для показа. По умолчанию, это пять, вроде как стандарт. Этот код выводит 5 случайных постов, имеющих один из тегов, которые присвоены записи, в которой код вызывается.
Теперь продолжим с категориями. Если вы хотите вывести записи из той же категории, которой принадлежит просматриваемая запись — это делает следующий скрипт:

<?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, // количество выводимых постов 
		'caller_get_posts'=>1
	);
$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>';
}
}?>

Код аналогичен, с поправкой на категорию.
Все это добро выводится списком, который можно настроить на свое усмотрение с помощью CSS. У меня организовано так — назначен блок с классом, внутри него выводится список, который я отформатировал как мне удобно. Работает без проблем, пользуйтесь
Удачного дня

, ,

Комментариев: 12

  1. SeoDenCas

    Привет, все живы.? а придумать приблуду, чтоб перекрестных не генерить, как вариант показывать выборку по тегам и отображать только записи с ID => +2, sort:ASC (порядковый номер следующих постов только больше на 2) пытался запилить, но в случае, если такого ID не существует (например имеем запись номер 666 и по нашим правилам на странице должны выводиться другуие записи и начинаться с !!!668ой айдишки!!! которой к примеру НЕТ),

    факт = недопилил и идея открыта для вакансий))

    Ответить
  2. Александр

    А можно сделать такой же вывод но например популярных помтов или просто случайных? Очень нравится реальзация вывода

    Ответить
    • GerinG

      Конечно можно.
      Для случайных в аргументах уберите отбор по категории и добавьте ‘orderby’ => ‘rand’.
      Для популярных — можно отсортировать по количеству комментариев, к примеру. Опять же, убирая категорию.
      Короче вариантов масса

      Ответить
  3. Dokuchi

    А можно изменить плагин так, чтобы выводились записи из данной категории, в которых присутствует конкретный тег?

    Ответить
  4. Riminy

    Подскажите как сделать, чтобы он выводит посты не по категории, а по тегу?

    Ответить
  5. akkad

    Огромное спасибо! Полезнейшие коды. Попробую себе сделать. Жаль, что только вчера нашёл Ваш блог.

    Ответить
  6. Олег

    Я как раз и искал подобную инфу, спасибо.
    Только вопрос — куда его вставлять? В single.php что ли ?

    Ответить