Numărarea posturilor returnate de get_posts în script PHP extern

11 mai 2013, 11:14:45
Vizualizări: 36.8K
Voturi: 3

Folosesc WordPress dintr-un script PHP extern prin includerea fișierului wp-load.php.

Toate funcțiile și totul funcționează după cum era de așteptat până acum, cu excepția unui lucru: nu pot să folosesc $wp_query->found_posts după ce preiau posturile cu funcția get_posts().

Aveți vreun indiciu ce ar trebui să folosesc în schimb?

Mulțumesc!

0
Toate răspunsurile la întrebare 1
6
10

Funcția WordPress get_posts() creează propria sa instanță a WP_Query care nu este accesibilă global:

function get_posts($args = null) {
    // ... tăiat ...
    $get_posts = new WP_Query;
    return $get_posts->query($r);
}

așadar, ai putea încerca

 $results = get_posts($args);
 echo count($results);

pentru a obține numărul de obiecte post returnate de get_posts().

Exemplu de utilizare a clasei WP_Query():

Ai putea lua în considerare utilizarea directă a clasei WP_Query().

Iată un exemplu de utilizare:

<?php
// parametrii tăi de intrare:   
$args = array(
    'posts_per_page' => 10,
);

$my_query = new WP_Query( $args );?>

Postări găsite: <?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();?>    

Folosim wp_reset_postdata() la final pentru a restabili obiectul global $post, deoarece îl modificăm prin metoda the_post().

Referințe:

http://codex.wordpress.org/Function_Reference/wp_reset_postdata

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

11 mai 2013 12:31:30
Comentarii

Mulțumesc pentru răspuns. Totuși, asta nu va funcționa cu adevărat - get_posts() va returna numărul de elemente pe pagină pe care îl stabilesc eu. Dacă sunt 100 de articole în total și preiau 10, numărarea rezultatelor în acest fel tot 10 mi le va oferi. Sper că e clar.

Aram Boyajyan Aram Boyajyan
13 mai 2013 11:38:11

O soluție improvizată ar fi să rulez interogarea de două ori, cu parametrul numberposts setat la -1 și să număr aceste rezultate. Dar e groaznic din punct de vedere al performanței și mă îndoiesc că aceasta este soluția corectă.

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

Cum ar fi să folosești WP_Query în loc de get_posts?

birgire birgire
14 mai 2013 15:24:14

O să încerc. Ar trebui să folosesc din nou $wp_query->found_posts pentru a obține numărul total de rezultate?

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

ar fi mai bine să folosești altceva decât $wp_query, de exemplu $my_query = new WP_Query($args); și apoi $my_query->found_posts și nu uita să folosești wp_reset_postdata() la final dacă modifici obiectul global $post.

birgire birgire
14 mai 2013 23:38:03

Am actualizat răspunsul.

birgire birgire
15 mai 2013 00:13:55
Arată celelalte 1 comentarii