Подсчет постов в цикле (WP_Query)?
Я пытался отобразить количество постов таким способом:
<?php
$news_2 = new WP_Query( array ('post_type'=> 'jobs','posts_per_page'=> '10' , 'meta_key' => 'status_for_jobs','meta_value' => '1') );
if ( $news_2->have_posts() ) { while ( $news_2->have_posts() ) { $news_2->the_post();
$count = $news_2->post_count;
?>
<li><h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3></li>
<?php } } ?> <?php wp_reset_query(); ?>
Если количество постов = 0, мне нужно отобразить следующее:
<?php
$news_2 = new WP_Query( array ('post_type'=> 'jobs','posts_per_page'=> '10' , 'meta_key' => 'status_for_jobs','meta_value' => '1') );
if ( $news_2->have_posts() ) { while ( $news_2->have_posts() ) { $news_2->the_post();
$count = $news_2->post_count;
if ($count == '0') {
?>
<li><h3><a href="javascript:void(0)">Нет постов</a></h3></li>
<?php
} else {
?>
<li><h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3></li>
<?php } ?>
<?php } } ?> <?php wp_reset_query(); ?>
Но вместо общего количества постов я не получаю ничего.
Есть предложения как это исправить?

Дополнительная информация: нет необходимости снова подсчитывать записи, потому что WP_Query
уже сделал это за вас. Для уточнения, вот информация из справочника класса WP_Query
, найденная в разделе »Свойства«:
$post_count
Количество отображаемых записей.$found_posts
Общее количество записей, соответствующих текущим параметрам запроса.
Это означает, что:
$post_count
не даст вам общее количество записей. Скорее всего, он вернет количество записей, определенное параметромpost_per_page
, если только у вас не меньше записей или вы не находитесь на последней странице, где осталось меньше записей.$found_posts
можно использовать для получения общего количества записей, соответствующих конкретному запросу. Так что нет необходимости считать их снова.
В вашем случае вы можете получить общее количество в переменную $count
следующим образом:
$count = $news_2->found_posts;
Кроме того, @helgatheviking прав в том, что, судя по вашему вопросу, вам не нужно дополнительное условие, а можно просто использовать метод have_posts()
в уже имеющемся условии, как она предложила.

Вам не нужно подсчитывать записи, чтобы отобразить что-то другое, если ничего не найдено. Вы можете просто использовать часть else
вашей проверки if($news_2->have_posts())
.
$news_2 = new WP_Query( array ('post_type'=> 'jobs','posts_per_page'=> '10' , 'meta_key' => 'status_for_jobs','meta_value' => '1') );
if ( $news_2->have_posts() ) {
while ( $news_2->have_posts() ) {
$news_2->the_post();
?>
<li><h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3></li>
<?php }
} else { ?>
<li><h3>Нет записей</h3></li>
<?php } ?>
<?php wp_reset_query(); ?>
Но если вам действительно нужно подсчитать количество возвращённых записей, вы можете использовать
$count = count( $news_2->posts );
