Количество комментариев одинаковое для каждого поста на главной странице WP_Query

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

У меня есть WP_Query на шаблоне главной страницы, который прекрасно работает с get_the_title() и многими другими функциями для каждого поста в цикле.

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

Я пробовал как echo get_comments_number($post->ID);, так и comments_number();

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

Замена echo get_comments_number($post->ID) на echo $post->comment_count решила проблему.

Я не понимаю, почему, ведь именно это и делает функция get_comments_number()

Ответ или решение

Когда вы создаете цикл WP_Query на главной странице, вы можете столкнуться с проблемой вывода количества комментариев, которая может отличаться от ожидаемого. В частности, как вы заметили, при использовании функций get_comments_number($post->ID) или comments_number() количество комментариев отображается одинаково для всех постов, повторяя значение первого поста.

Причина этого поведения заключается в том, что вы, вероятно, не обновляете глобальный объект $post, который используется WordPress для извлечения данных о текущем посте. Когда вы используете get_comments_number($post->ID), функция обращается к глобальному объекту $post, который не изменяется в цикле, если не обновить его явно.

Чтобы исправить эту проблему, вместо использования функции get_comments_number(), вы можете обратиться напрямую к свойству comment_count объекта поста, и как вы правильно заметили, использование echo $post->comment_count; работает корректно. Это происходит потому, что свойство $post->comment_count уже содержит актуальное количество комментариев для текущего поста в цикле.

Вот пример, который поможет вам правильно вывести количество комментариев для каждого поста в WP_Query на главной странице:

<?php 
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
);
$query = new WP_Query($args);

if ($query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post(); 
?>
        <h2><?php the_title(); ?></h2>
        <p><?php the_excerpt(); ?></p>
        <span><?php echo $post->comment_count; ?> комментариев</span>
<?php 
    endwhile;
    wp_reset_postdata();
else :
    echo '<p>Посты не найдены.</p>';
endif; 
?>

Таким образом, перед выводом количества комментариев вы просто обращаетесь к свойству $post->comment_count, что гарантирует, что вы получаете правильное значение для каждого поста в цикле.

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

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

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