Contar posts devueltos por get_posts en script PHP externo

11 may 2013, 11:14:45
Vistas: 36.8K
Votos: 3

Estoy usando WP desde un script PHP externo incluyendo el archivo wp-load.php.

Todas las funciones y todo funciona como se espera hasta ahora, excepto una cosa: no puedo hacer que $wp_query->found_posts funcione después de obtener posts con la función get_posts().

¿Alguna sugerencia sobre qué debería usar en su lugar?

¡Gracias!

0
Todas las respuestas a la pregunta 1
6
10

La función de WordPress get_posts() crea su propia instancia de WP_Query que no es accesible globalmente:

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

por lo que en su lugar podrías probar

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

para obtener el conteo de objetos de publicación devueltos por get_posts().

Ejemplo de uso de la clase WP_Query():

Podrías considerar usar la clase WP_Query() directamente.

Aquí hay un ejemplo de cómo puedes usarla:

<?php
// tus parámetros de entrada:   
$args = array(
    'posts_per_page' => 10,
);

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

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

Usamos wp_reset_postdata() al final, para restaurar el objeto global $post, ya que lo modificamos mediante el método the_post().

Referencia:

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

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

11 may 2013 12:31:30
Comentarios

Gracias por tu respuesta. Sin embargo, eso no funcionará realmente - el get_posts() devolverá el número de elementos por página que yo determine. Si hay 100 publicaciones en total y obtengo 10, contar los resultados de esta manera aún me dará 10. Espero que esto tenga sentido.

Aram Boyajyan Aram Boyajyan
13 may 2013 11:38:11

Una solución rápida sería ejecutar la consulta dos veces, con el parámetro numberposts establecido en -1 y contar esos resultados. Pero es horrible desde el punto de vista del rendimiento y dudo que esta sea la solución correcta.

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

¿Qué tal si usas WP_Query en lugar de get_posts?

birgire birgire
14 may 2013 15:24:14

Lo probaré. ¿Debería usar nuevamente $wp_query->found_posts para obtener el conteo de todos los resultados?

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

deberías usar algo diferente a $wp_query, por ejemplo $my_query = new WP_Query($args); y luego $my_query->found_posts y recuerda usar wp_reset_postdata() al final si cambias el objeto global $post.

birgire birgire
14 may 2013 23:38:03

Actualicé la respuesta.

birgire birgire
15 may 2013 00:13:55
Mostrar los 1 comentarios restantes