Вопрос или проблема
под статьями показываются связанные публикации. Я хочу удалить текущую публикацию с этим. Код в файле related-posts.php:
<?php
/*
* Связанные публикации для одного поста.
*/
global $post;
$exclude = $post->ID;
$cats = get_the_category( $post->ID );
$cat_ids = array(); // пустой массив для добавления в него ID
foreach( $cats as $cat ):
$cat_ids[] = $cat->term_id;
endforeach;
$args = array(
'posts_per_page' => 5,
'category__in' => $cat_ids,
'orderby' => 'random',
'exclude' => $exclude,
'post_type' => 'post',
'ignore_sticky_posts' => 'true'
);
$related_posts = new WP_Query($args); ?>
<?php if ( $related_posts->have_posts() && $related_posts->found_posts >= 2 ) : ?>
<div class="related-posts clearfix">
<h2><?php _e( 'Вам могут понравиться эти публикации', 'awaken-pro' ); ?></h2>
<div class="awaken-related-posts">
<?php
if ( $related_posts->have_posts() ) :
while ( $related_posts->have_posts() ) : $related_posts->the_post(); ?>
<article class="rpost clearfix">
<div class="amsr-thumb">
<?php if( has_post_thumbnail() ) { ?>
<a href="<?php echo get_permalink( $post->ID ); ?>"><?php the_post_thumbnail( 'small-thumb' ); ?></a>
<?php } else { ?>
<a href="<?php the_permalink(); ?>">
<img src="<?php echo get_template_directory_uri() . '/images/mini-thumbnail-default.jpg'; ?>"/>
</a>
<?php } ?>
</div>
<div id="related-posts-title">
<h3><a href="<?php echo get_permalink( $post->ID ); ?>"><?php the_title(); ?></a></h3>
</div>
</article>
<?php endwhile;
endif;
?>
</div>
</div><!-- end related posts -->
<?php wp_reset_postdata(); ?>
<?php endif; ?>
Я попробовал изменить код:
'exclude' => $exclude,
на:
'post__not_in' => $array($post->ID, 2),
но это не работает.
Ответ или решение
Для исключения текущего поста из списка связанных постов в WordPress, необходимо корректно настроить параметры запроса WP_Query. Давайте разберем, как это можно сделать, учитывая ваш исходный код и возникшие сложности.
Теория
В WordPress для получения связанных постов часто используется класс WP_Query
, с помощью которого можно настроить различные параметры фильтрации и сортировки постов. Одним из таких параметров является исключение определенных постов из выборки с помощью аргумента post__not_in
. Этот аргумент принимает массив с идентификаторами постов, которые должны быть исключены из результата запроса.
Когда мы хотим исключить текущий пост из списка связанных постов, мы должны убедиться, что ID текущего поста включен в массив, передаваемый в post__not_in
. Это позволяет гибко управлять выборкой, добавляя в нее только нужные посты.
Пример
В вашем коде изначально используется неверный параметр 'exclude' => $exclude
, который не является частью оригинальной документации по WP_Query. Вместо этого, следует использовать post__not_in
. Также нужно правильно сформировать массив с ID поста, который нужно исключить. Ошибка в вашем изменении связана с тем, что вы пытаетесь использовать $array
вместо array()
, что является синтаксической ошибкой.
Вот как можно правильно изменить ваш код, чтобы исключить текущий пост:
<?php
// Глобальная переменная для текущего поста
global $post;
// Получаем ID текущего поста
$exclude = array($post->ID);
// Получаем категории текущего поста
$cats = get_the_category($post->ID);
$cat_ids = array(); // пустой массив для ID категорий
// Заполняем массив ID категорий
foreach($cats as $cat) {
$cat_ids[] = $cat->term_id;
}
// Настраиваем параметры WP_Query
$args = array(
'posts_per_page' => 5,
'category__in' => $cat_ids,
'orderby' => 'random',
'post__not_in' => $exclude,
'post_type' => 'post',
'ignore_sticky_posts' => true // это булевое значение
);
// Создаем новый объект запроса WP_Query
$related_posts = new WP_Query($args);
?>
Применение
Теперь, когда вы знаете, как правильно настроить WP_Query для исключения текущего поста, давайте рассмотрим, почему это важно и как это может быть использовано в реальных проектах.
-
Улучшение пользовательского опыта: Исключая текущий пост из списка связанных, вы избегаете ситуации, когда пользователи видят статьи, которые уже просматривают. Это делает интерфейс более удобным и интуитивно понятным.
-
Снижение нагрузки на сервер: Правильно настроенный запрос минимизирует запросы к базе данных, что может снизить нагрузку на вашу систему, особенно если ваш сайт генерирует много трафика.
-
Повышение релевантности контента: Используя фильтры для категоризации и исключения постов, вы можете предоставлять пользователям более адаптированные рекомендации, что может увеличить количество просмотренных страниц и время, проведенное на сайте.
-
Гибкая настройка: Используя WP_Query, вы можете не только исключать текущий пост, но и легко добавлять другие условия, такие как удержание постов только из определенного периода или исключение постов из нескольких категорий.
Заключение
Обратите внимание на синтаксис использования array
и WP_Query
, чтобы избежать ошибок. Проверяйте документацию WordPress для актуальной информации и примеров использования всех возможных параметров WP_Query. Ваша цель – создать такой пользовательский интерфейс, который обеспечит максимально комфортное взаимодействие с сайтом и интеграцию связанных постов без повторяющегося контента. Такие небольшие изменения могут существенно повлиять на уровень удовлетворенности и вовлеченности ваших пользователей.