Подсчет постов в цикле (WP_Query)?

29 мар. 2014 г., 16:28:57
Просмотры: 41.6K
Голосов: 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)">Нет постов</a></h3></li>

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

<?php  }  ?>

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

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

Есть предложения как это исправить?

2
Комментарии

Эй, хочешь вернуться и высказаться по одному из двух предоставленных тебе ответов?

helgatheviking helgatheviking
2 апр. 2014 г. 16:13:27

Если какой-либо из ответов был вам полезен, рассмотрите возможность его принятия. См. »Что мне делать, когда кто-то отвечает на мой вопрос?« и/или »Почему важны голоса?«. Дополнительная информация о модели разработки WordPress доступна в [справке].

Nicolai Grossherr Nicolai Grossherr
30 апр. 2015 г. 18:38:29
Все ответы на вопрос 2
1
25

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

29 мар. 2014 г. 17:26:16
Комментарии

+1 за свойство found_posts. Каждый день узнаёшь что-то новое! :)

helgatheviking helgatheviking
30 мар. 2014 г. 02:23:47
0

Вам не нужно подсчитывать записи, чтобы отобразить что-то другое, если ничего не найдено. Вы можете просто использовать часть 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 );
29 мар. 2014 г. 16:46:41