Compter les posts d'une boucle Wordpress personnalisée (WP_Query)?

41

J'ai essayé de placer ceci:

    <?php $count = count($custom_posts); ?>
    <h2><?php echo $count; ?></h2>

à la fin de la boucle:

      <?php if ( bbp_get_forum_title() == 'Test Forum 1' ) : ?>
            <?php $custom_posts = new WP_Query(); ?>
            <?php $custom_posts->query('post_type=blocks&location=Business and Finance&order=DESC'); ?>
            <?php while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?>
                <div class="ad">
                    <?php the_content(); ?>
                </div>
                <?php $count = count($custom_posts); ?>
                <h2><?php echo $count; ?></h2>
            <?php endwhile; ?>
      <?php endif; ?>

Mais au lieu du total des posts, j'obtiens cette sortie:

Traduction 1

Lorem ipsum dolor sit amet, consectetuer elit adipiscing, sed diam nummh non euh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim 1

Des suggestions pour résoudre ce problème?

janoChen
la source

Réponses:

74

La manière correcte d’obtenir le nombre total de messages est:

<?php $count = $custom_posts->found_posts; ?>

http://codex.wordpress.org/Class_Reference/WP_Query#Properties

Edit: reconnaître que la réponse de @Kresimir Pendic est probablement correcte. post_countest le nombre de publications pour cette page particulière, tandis que found_postsest le nombre de toutes les publications disponibles qui répondent aux exigences de la requête sans pagination. Merci pour la correction.

Manny Fleurmond
la source
Merci! Hey une dernière question. Comment puis-je utiliser ce nombre pour faire une instruction if qui est en dehors de cette boucle (avant la boucle). Parce qu'il semble que le nombre ne s'affiche que lorsque je place la variable après cette boucle.
janoChen
4
Vous pouvez mettre le $ count = $ custom_posts-> post_count juste après le $ custom_posts-> query (). Notez que $ custom_posts-> post_count ne vous donne que le nombre de résultats dans cette "page" du jeu de résultats. Si vous devez obtenir le nombre total de résultats dans le jeu de résultats 'entier', utilisez $ custom_posts-> found_posts.
Robert Durgin
2
Cette réponse est probablement impraticable dans la plupart des situations. Utilisez found_posts (tous les messages trouvés) au lieu de post_count (nombre de messages à afficher sur cette page). Ce commentaire est redondant logiquement, mais pas socialement.
Herbert Van-Vliet
1
Cette réponse est incorrecte. $custom_posts->post_countrenverra le nombre de messages affichés sur cette page, ce qui affichera soit la posts_per_pagevaleur de la requête, soit une valeur inférieure si le montant restant à afficher est inférieur. la bonne réponse devrait être <@kresimir-pendic>la réponse qui utilise$custom_posts->found_posts
Infinity Media
42

Manny a lié la page de documentation correcte mais post_countest erronée. Pour obtenir le nombre total de WP_Queryréponses, utilisez "found_posts"

<?php

// The Query
$query = new WP_Query( $args );
$total = $query->found_posts;
Kresimir Pendic
la source
3
Celui-ci devrait être la réponse acceptée.
Christine Cooper
1
C'est absolument la bonne réponse.
Infinity Media
Je confirme également que c'est la bonne réponse. Cela devrait être accepté.
Je suis la personne la plus stupide le