Zliczasz posty w pętli (WP_Query)?

10

Próbowałem w ten sposób wyświetlić liczbę postów:

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

jeśli liczba post = 0, muszę to wyświetlić: -

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

Ale zamiast łącznej liczby postów nic nie dostaję.

Wszelkie sugestie, aby to naprawić?

użytkownik49575
źródło
2
Hej, chcesz wrócić i zastanowić się nad jedną z 2 odpowiedzi, które zostały ci dostarczone?
helgatheviking
Jeśli którakolwiek odpowiedź była dla Ciebie pomocna, rozważ ją. Zobacz » Co powinienem zrobić, gdy ktoś odpowie na moje pytanie? «I / lub» Dlaczego głosowanie jest ważne? «Więcej informacji na temat modelu rozwoju WordPress można znaleźć w centrum pomocy .
Nicolai

Odpowiedzi:

23

Niektóre dodatkowe informacje, nie trzeba ponownie liczyć postów, ponieważ WP_Queryjuż to zrobiłem dla Ciebie. Aby to wyjaśnić, niektóre informacje z odwołania do klasy WP_Queryznajdują się w sekcji »Właściwości«:

$ post_count
Liczba wyświetlanych postów.

$ found_posts
Całkowita liczba znalezionych postów pasujących do aktualnych parametrów zapytania

To znaczy

  1. $post_countnie poda całkowitej liczby postów. Najprawdopodobniej poda liczbę postów, które zdefiniowałeś za pomocą tego post_per_pageparametru, chyba że masz mniej postów lub jesteś na ostatniej stronie i pozostało tylko mniej postów.
  2. $found_postsmożna użyć, aby uzyskać łączną liczbę postów związanych z określonym zapytaniem. Dlatego nie trzeba ich ponownie liczyć.

W twoim przypadku możesz zapisać całkowitą liczbę do swojej $countzmiennej w następujący sposób:

$count = $news_2->found_posts;

Poza tym @helgatheviking ma rację, że z tego, co pokazałeś w swoim pytaniu, nie potrzebujesz dodatkowego warunku, ale możesz po prostu użyć have_posts()metody, w warunku, który już masz, jak sugerowała.

Nicolai
źródło
4
+1 dla właściwości found_posts. Każdego dnia uczysz się czegoś nowego! :)
helgatheviking
4

Nie musisz liczyć postów, aby pokazać coś innego, jeśli nie zostaną znalezione. Możesz po prostu użyć elseczęści if($news_2->have_posts())czeku.

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

Ale jeśli naprawdę musisz policzyć liczbę zwróconych postów, możesz użyć

$count = count( $news_2->posts );
helgatheviking
źródło