Считать сообщения цикла (WP_Query)?

10

Я попробовал этот способ, чтобы отобразить НЕТ сообщения:

<?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)">No Post</a></h3></li>

  <?php
  } else {
  ?> 
    <li><h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3></li>

<?php  }  ?>

    <?php } } ?> <?php wp_reset_query(); ?> 

Но вместо общего количества постов я ничего не получаю.

Любые предложения, чтобы это исправить?

user49575
источник
2
Эй, хочешь вернуться и взвесить любой из двух ответов, которые были тебе предоставлены?
helgatheviking
Если какой-либо из ответов был вам полезен, подумайте о его принятии. Смотрите » Что мне делать, когда кто-то отвечает на мой вопрос? «И / или» Почему важно голосование? «Более подробная информация о модели разработки WordPress доступна в справочном центре .
Николай

Ответы:

23

Некоторая дополнительная информация, не нужно пересчитывать сообщения снова, потому что WP_Queryуже сделал это для вас. Чтобы прояснить это, некоторая информация из ссылки на класс WP_Queryнаходится в разделе «Свойства»:

$ post_count
Количество отображаемых сообщений.

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

Что это значит

  1. $post_countне даст вам общее количество сообщений. Скорее всего, он даст вам количество сообщений, которые вы определили с помощью post_per_pageпараметра, если только у вас меньше сообщений, чем это, или вы находитесь на последней странице, и осталось только меньше сообщений.
  2. $found_postsможет использоваться для получения общего количества сообщений, связанных с конкретным запросом. Так что нет необходимости пересчитывать их снова.

В вашем случае вы можете получить общее количество в вашей $countпеременной следующим образом:

$count = $news_2->found_posts;

Кроме того, @helgatheviking прав в том, что из того, что вы показали в своем вопросе, вам не нужно дополнительное условие, но вы можете просто использовать have_posts()метод, в том условии, которое у вас уже есть, для этого, как она предложила.

Nicolai
источник
4
+1 для свойства found_posts. Ты узнаешь что-то новое каждый день! :)
helgatheviking
4

Вам не нужно считать посты, чтобы показать что-то другое, если посты не найдены. Вы можете просто использовать 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>No Post</h3></li>

    <?php } ?> 

<?php wp_reset_query(); ?> 

Но если вам действительно нужно посчитать количество возвращенных постов, вы можете использовать

$count = count( $news_2->posts );
helgatheviking
источник