Как исключить текущий пост из связанных постов

Вопрос или проблема

под статьями показываются связанные публикации. Я хочу удалить текущую публикацию с этим. Код в файле 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 для исключения текущего поста, давайте рассмотрим, почему это важно и как это может быть использовано в реальных проектах.

  1. Улучшение пользовательского опыта: Исключая текущий пост из списка связанных, вы избегаете ситуации, когда пользователи видят статьи, которые уже просматривают. Это делает интерфейс более удобным и интуитивно понятным.

  2. Снижение нагрузки на сервер: Правильно настроенный запрос минимизирует запросы к базе данных, что может снизить нагрузку на вашу систему, особенно если ваш сайт генерирует много трафика.

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

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

Заключение

Обратите внимание на синтаксис использования array и WP_Query, чтобы избежать ошибок. Проверяйте документацию WordPress для актуальной информации и примеров использования всех возможных параметров WP_Query. Ваша цель – создать такой пользовательский интерфейс, который обеспечит максимально комфортное взаимодействие с сайтом и интеграцию связанных постов без повторяющегося контента. Такие небольшие изменения могут существенно повлиять на уровень удовлетворенности и вовлеченности ваших пользователей.

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

Капча загружается...