Contar posts devueltos por get_posts en script PHP externo
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!
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

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.

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.

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

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
.
