/ Wordpress / Похожие записи

Похожие записи

HIT

16.09.2015

1839

Рассмотрим несколько техник вывода похожих записей (Related posts). Похожие записи можно выводить двумя способами: автоматически (алгоритм) и в ручную. Методы вывода похожих записей: кусок кода в шаблоне single, либо плагином.

Автоматический способ вывода похожих записей. Используем чистый код вывода php

Похожие записи по меткам

Вставляем код в шаблон вывода записи (single.php), ниже основного цикла
Жирным выделена поддержка произвольных типов записей (‘post_type’=> ‘any’)

<div id="related-posts">
<h3>Похожие записи:</h3>
<?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, // Сортировка происходит по тегам (меткам)
'orderby'=>'rand', // Добавляем условие сортировки рандом (случайный подбор)
'ignore_sticky_posts'=>1, // Запрещаем повторение ссылок
'post__not_in' => array($post->ID),
'showposts'=>5, // Цифра означает количество выводимых записей
'post_type'=> 'any' 
);
$my_query = new wp_query($args);
if( $my_query->have_posts() ) {
echo '<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>';
}
wp_reset_query();
}
?></div>

Альтернативный вариант кода (упрощенный, правильный)

<!-- Related posts block -->

<?php $tags = wp_get_post_tags($post->ID); if ($tags) : //Проверяем есть ли тэги ?>
<?php $tag_ids = array();

foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;

$args=array(
'tag__in' => $tag_ids, // Сортировка происходит по тегам (меткам)
'orderby'=>rand, // Добавляем условие сортировки рандом (случайный подбор)
'ignore_sticky_posts'=>1, // Запрещаем повторение ссылок
'post__not_in' => array($post->ID),
'showposts'=>5 // Цифра означает количество выводимых записей
);

$my_query = new wp_query($args);

if( $my_query->have_posts() ) : ?>

<hr class="line">
<div id="related-posts">

<div id="post-content">
<p>Похожие записи:</p>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>

<div <?php post_class() ?> id="post-<?php the_ID(); ?>">

<a href="<?php the_permalink(); ?>">
<?php if( has_post_thumbnail() )
{the_post_thumbnail(square);}
else
{echo '<img src="'.get_bloginfo("template_url").'/images/img-default-square.jpg" />';}
?>
</a>

<h2 class="title-post"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php if( get_the_tag_list()): ?><?php the_tags( '<small>', ' / ', '</small>' ); ?><?php endif; ?>

</div>
<?php endwhile; ?>

</div>
</div>
<?php endif; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>

Похожие записи по категориям (используется реже)

Также вставляем код в шаблон single.php, ниже основного цикла

<div id="related-posts">
<h3>Дополнительные записи</h3>
<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'=>3, // Количество выводимых записей
        'ignore_sticky_posts'=>1
    );

$my_query = new wp_query($args);
    if( $my_query->have_posts() ) {
        echo '';
        while ($my_query->have_posts()) {
            $my_query->the_post();
        ?>

            <li class="post_mini">
			<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
			<?php if (  (function_exists('has_post_thumbnail')) && (has_post_thumbnail())  ) : ?>
	<a class="post_thumbnail" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" alt=""><?php the_post_thumbnail(array( 234,124)); ?></a>
<?php endif; ?>

</li>

        <?php
        }
        echo '';
    }
    wp_reset_query();
}
?>
</ul>
</div>

Альтернативный вариант (правильный)

<!-- Related posts block -->

<?php $categories = get_the_category($post->ID); if ($categories) : //Проверяем есть ли тэги ?>
<?php $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'=>3, // Количество выводимых записей
 'ignore_sticky_posts'=>1
 );

$my_query = new wp_query($args);

if( $my_query->have_posts() ) : ?>

<hr class="line">
<div id="related-posts">

<div id="post-content">
 <p align="center"><strong>Похожие товары:</strong></p>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
 
 
 <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
 
 <div class="photo">
 <a href="<?php the_permalink(); ?>"> 
 <?php if( has_post_thumbnail() ) 
 {the_post_thumbnail(square);} 
 else 
 {echo '<img src="'.get_bloginfo("template_url").'/image/no-mage.jpg" />';}
 ?>
 </a>
 </div>
 
 <h2 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>

 <?php the_tags( '<p class="tm">ТМ: ', ' / ', '</p>' ); ?> 
 
 </div>

 
<?php endwhile; ?>

</div>
</div>
<?php endif; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>

Похожие записи по категории и по тегу

В упрощенный код по категориям добавляем (после строки foreach)

$tags = get_the_tags($post->ID);
foreach($tags as $individual_tag);

А в формирование массива вносим 2 записи (выделено жирным)

$args=array(
'category__in' => $category_ids,
'tag__in' => $individual_tag->term_id,
'orderby' => 'rand', //для разнообразия
'post__not_in' => array($post->ID),
'showposts'=>3, // Количество выводимых записей
'ignore_sticky_posts'=>1
    );

Ручное назначение похожих записей

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

Обновленный вариант по меткам

19.02.2018: Добавил проверку есть ли метки и удалил неиспользуемые методы

<!-- Related posts block -->
<?php $tags = wp_get_post_tags($post->ID, array( 'fields' => 'ids' )); ?>

<?php if (!empty($tags)): //Проверка есть ли теги ?> 
   

<?php $tag_ids = array();

foreach($tags as $individual_tag) $tag_ids[] = $individual_tag;

$args = array(
	'tag__in' => $tag_ids,
	'orderby' => 'rand',
	'post__not_in' => array($post->ID),
	'showposts' => 3,
	'post_type' => 'post' 
);

$my_query = new wp_query($args);
if( $my_query->have_posts() ) : ?>

<h2>Вас также могут заинтересовать:</h2>
<div id="posts-archive">
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
  
<?php get_template_part( 'solus' ); ?>
  
<?php endwhile; ?>
</div>  
 
<?php endif; ?>
<?php wp_reset_query(); ?>


<?php endif; ?>

Поделиться в соц. сетях:

  • Комментарии
  • Вложения

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

Пока нет комментариев. Будь первым!

Похожие записи
Облако меток, категорий, таксономий
Рекомендации для васОблако меток, категорий, таксономийOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.