web-dev-qa-db-fra.com

Compter les posts d'une boucle (WP_Query)?

J'ai essayé cette façon d'afficher NO of post:

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

si le NO de post = 0, je dois afficher ceci: -

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

Mais au lieu du total des messages, je ne reçois rien.

Des suggestions pour résoudre ce problème?

8
user49575

Quelques informations supplémentaires, pas besoin de compter à nouveau les publications, car WP_Query l'a déjà fait pour vous. Pour clarifier cela, certaines informations de la référence de classe de WP_Query se trouvent dans la section "Propriétés":

$ post_count
Le nombre de messages affichés.

$ found_posts
Le nombre total de publications trouvées correspondant aux paramètres de requête actuels.

Qu'est-ce que cela signifie?

  1. $post_count ne vous donnera pas le nombre total de messages. Il vous indiquera probablement le nombre de publications que vous avez défini avec le paramètre post_per_page, sauf si vous avez moins de publications que cela ou si vous êtes sur la dernière page et qu'il ne reste que moins de publications.
  2. $found_posts peut être utilisé pour obtenir le nombre total de publications liées à une requête spécifique. Il n'est donc pas nécessaire de les compter à nouveau.

Dans votre cas, vous pouvez obtenir le nombre total dans votre variable $count comme ceci:

$count = $news_2->found_posts;

En plus de cela, @helgatheviking a raison de dire que, d'après ce que vous avez montré dans votre question, vous n'avez pas besoin de condition supplémentaire, mais vous pouvez simplement utiliser la méthode have_posts(), dans la condition que vous avez déjà, pour cela, comme elle l'a suggéré.

21
Nicolai

Vous n'avez pas besoin de compter les messages pour afficher quelque chose de différent si aucun message n'est trouvé. Vous pouvez simplement utiliser la partie else de votre vérification 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(); ?> 

Mais si vous devez vraiment compter le nombre de messages renvoyés, vous pouvez utiliser

$count = count( $news_2->posts );
3
helgatheviking