WordPress: похожие статьи по меткам и категориям без повторов

afonsky
На сайте с 07.01.2007
Offline
123
795

Доброго времени суток, друзья, товарищи! :idea:

Вывожу в шаблоне single.php похожие записи по меткам:


<?php
$tags = wp_get_post_tags($post->ID);
if ($tags) {
$first_tag = $tags[0]->term_id;
$args=array(
'tag__in' => array($first_tag),
'post__not_in' => array($post->ID),
'showposts'=>4,
'caller_get_posts'=>1
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
echo '
<p>Записи по этой теме:</p>
<ul>
';
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<li><a href="<?php the_permalink()?>"><?php the_title(); ?></a></li>
<?php
endwhile;
echo '</ul>';
}
wp_reset_query();
}
?>

потом вывожу по категориям:


<?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'=>4, // Количество выводимых записей
'caller_get_posts'=>1
);
$my_query = new wp_query($args);
if( $my_query->have_posts() ) {
echo '
<p>Записи из этой же рубрики:</p>
<ul>
';
while ($my_query->have_posts()) { $my_query->the_post(); ?>
<li><a href="<?php the_permalink()?>"><?php the_title(); ?></a></li>
<?php
}
echo '</ul>';
}
wp_reset_query();
}
?>

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

Как совместить коды, чтобы в выводе записей из рубрики исключались уже выведенные записи этой рубрики по меткам.

Лучший Абузоустойчивый хостинг (https://cp.inferno.name/aff.php?aff=986)
Руслан С
На сайте с 12.12.2015
Offline
9
#1

Перед первым while создаете массив ID.

$relative_id_list = [];

Внутри блока while добавляете array_push($relative_id_list, $post->ID).

После блока while делаете var_dump($relative_id_list). Если все сделали правильно, при перезагрузке страницы, под блоком похожих публикаций увидите список их идентификаторов.

Дальше, нужно исключить эти идентификаторы с запроса публикаций из категории. Модифицируем второй WP_Query добавляя 'post__not_in' => $relative_id_list.

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

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