Contare i post restituiti da get_posts in uno script PHP esterno

11 mag 2013, 11:14:45
Visualizzazioni: 36.8K
Voti: 3

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!

0
Tutte le risposte alla domanda 1
6
10

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

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

11 mag 2013 12:31:30
Commenti

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.

Aram Boyajyan Aram Boyajyan
13 mag 2013 11:38:11

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.

Aram Boyajyan Aram Boyajyan
13 mag 2013 11:45:37

Cosa ne pensi di usare WP_Query invece di get_posts?

birgire birgire
14 mag 2013 15:24:14

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

Aram Boyajyan Aram Boyajyan
14 mag 2013 22:12:53

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.

birgire birgire
14 mag 2013 23:38:03

Ho aggiornato la risposta.

birgire birgire
15 mag 2013 00:13:55
Mostra i restanti 1 commenti