Вопрос или проблема
У меня есть 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
, чтобы избежать путаницы в данных, особенно если у вас есть несколько циклов на одной странице.