Contare i post restituiti da get_posts in uno script PHP esterno
Sto usando WordPress da uno script PHP esterno includendo il file wp-load.php
.
Tutte le funzioni e tutto funziona come previsto finora, tranne una cosa: non riesco a far funzionare $wp_query->found_posts
dopo aver recuperato i post con la funzione get_posts()
.
Avete suggerimenti su cosa dovrei usare invece?
Grazie!
La funzione WordPress get_posts()
crea una sua istanza di WP_Query
che non è accessibile globalmente:
function get_posts($args = null) {
// ... tagliato ...
$get_posts = new WP_Query;
return $get_posts->query($r);
}
quindi potresti invece provare
$results = get_posts($args);
echo count($results);
per ottenere il conteggio dell'array di oggetti post restituiti da get_posts()
.
Esempio di utilizzo della classe WP_Query():
Potresti considerare di utilizzare direttamente la classe WP_Query()
.
Ecco un esempio di come puoi usarla:
<?php
// i tuoi parametri di input:
$args = array(
'posts_per_page' => 10,
);
$my_query = new WP_Query( $args );?>
Post trovati: <?php echo $my_query->found_posts;?>
<?php if ( $my_query->have_posts() ):?>
<ul>
<?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
<li> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php wp_reset_postdata();?>
Usiamo wp_reset_postdata()
alla fine, per ripristinare l'oggetto globale $post
, poiché lo modifichiamo tramite il metodo the_post()
.
Riferimenti:
http://codex.wordpress.org/Function_Reference/wp_reset_postdata

Grazie per la tua risposta. Tuttavia questa soluzione non funzionerà realmente - la funzione get_posts()
restituirà il numero di elementi per pagina che io determino. Se ci sono 100 post in totale e ne recupero 10, contare i risultati in questo modo mi darà comunque 10. Spero sia chiaro.

Una soluzione sporca sarebbe eseguire la query due volte, con il parametro numberposts
impostato a -1
e contare quei risultati. Ma è terribile dal punto di vista delle prestazioni e dubito sia la soluzione corretta.

Proverò. Dovrei usare di nuovo $wp_query->found_posts
per ottenere il conteggio di tutti i risultati?

dovresti usare qualcosa di diverso da $wp_query
, ad esempio $my_query = new WP_Query($args);
e poi $my_query->found_posts
e ricordati di usare wp_reset_postdata()
alla fine se cambi l'oggetto globale $post
.
