Contando as postagens de um loop (WP_Query)?

8

Eu tentei exibir o NO de postagem:

<?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(); ?> 

se o NO de post = 0 eu precisar mostrar isso: -

<?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(); ?> 

Mas, em vez do total de posts, não recebo nada.

Alguma sugestão para corrigir isso?

    
por user49575 29.03.2014 / 15:28

2 respostas

20

Algumas informações adicionais, não é preciso contar as postagens novamente, porque WP_Query já fez isso para você. Para esclarecer isso, algumas informações da Referência de Classe de WP_Query como encontradas na seção »Propriedades«:

  

$ post_count
  O número de postagens exibidas.

     

$ found_posts
  O número total de postagens encontradas que correspondem aos parâmetros de consulta atuais

O que isto significa é

  1. $post_count não fornece a contagem total de postagens. Ele provavelmente fornecerá o número de postagens que você definiu com o parâmetro post_per_page , a menos que você tenha menos postagens do que aquelas ou esteja na última página e haja apenas menos postagens restantes.
  2. $found_posts pode ser usado para obter o número total de post relacionado a uma consulta específica. Portanto, não há necessidade de contá-los novamente.

No seu caso, você pode obter a contagem total em sua variável $count da seguinte forma:

$count = $news_2->found_posts;

Além disso, @helgatheviking está certo de que, pelo que você mostrou em sua pergunta, você não precisa de uma condição extra, mas pode usar apenas o método have_posts() , na condição que você já tem, para isso , como ela sugeriu.

    
por Nicolai 29.03.2014 / 16:26
3

Você não precisa contar as postagens para mostrar algo diferente se nenhuma postagem for encontrada. Você pode usar apenas a parte else da sua if($news_2->have_posts()) check.

$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(); ?> 

Mas se você realmente precisar contar o número de postagens retornadas, use

$count = count( $news_2->posts );
    
por helgatheviking 29.03.2014 / 15:46

Tags