¿Cómo obtener un array de datos de publicaciones del resultado de wp_query?

11 ago 2012, 07:05:53
Vistas: 212K
Votos: 61

Cuando ejecuto una consulta con el método WP_Query, obtengo un objeto. Entiendo que puedo usar el loop para mostrar elementos. Sin embargo, mi objetivo no es mostrar nada, en su lugar, quiero obtener algunos datos de las publicaciones haciendo algo como "foreach...". ¿Cómo puedo obtener un array de datos de publicaciones que pueda recorrer y obtener información?

1
Comentarios

Una diferencia importante a tener en cuenta entre acceder directamente a los datos de la publicación versus usar etiquetas de plantilla es que los filtros no se aplican a los datos y algunas funcionalidades pueden fallar.

Milo Milo
30 dic 2016 20:10:10
Todas las respuestas a la pregunta 3
5
114

Deberías leer la referencia de funciones para WP_Query en el codex de WordPress. Allí tienes muchos ejemplos para revisar. Si no deseas iterar sobre el conjunto de resultados usando un while, podrías obtener todas las publicaciones devueltas por la consulta con WP_Query en la propiedad posts.

Por ejemplo

$query = new WP_Query( array( 'post_type' => 'page' ) );
$posts = $query->posts;

foreach($posts as $post) {
    // Haz lo que necesites, por ejemplo:
    // echo $post->post_name;
}
11 ago 2012 11:35:25
Comentarios

Ninguno de los ejemplos que enlazas demuestra cómo procesar posts, sin embargo. Así que es bueno que hayas respondido, lástima que no lo tengan en la documentación. Otro consejo: Si estás haciendo una coincidencia en un post único puedes usar una función como esta con 'posts_per_page'=>1 en los argumentos. function wp_queryfirstpost($args) { $q=new WP_Query($args); $pp=$q->get_posts(); $firstpost=false;if ($pp) $firstpost=$pp[0]; wp_reset_postdata(); return $firstpost; }

Henrik Erlandsson Henrik Erlandsson
21 mar 2014 11:38:07

@rofflox: ¡Eres un santo! Genial para evitar get_the_title/ID/loquesea.

Vial Vial
30 abr 2015 20:39:34

Deberías usar $query->posts en su lugar, $query->get_posts() volverá a ejecutar el análisis de la consulta y realizará consultas a la base de datos adicionales innecesarias

Tom J Nowell Tom J Nowell
1 nov 2015 05:31:12

$query->get_posts(); no funciona como se esperaba. No estoy seguro por qué pero devuelve menos publicaciones que la consulta. Ver aquí: https://stackoverflow.com/questions/25395299/how-do-i-get-wordpress-wp-query-get-posts-on-multiple-categories-to-work

Laxmana Laxmana
12 nov 2016 19:05:55

Esta respuesta es completamente incorrecta, cuando creas una nueva WP_Query con algunos argumentos, el método get_posts() se llama internamente de inmediato y ¡NO DEBES LLAMARLO NUEVAMENTE! Si lo llamas nuevamente como se muestra en el ejemplo anterior, ejecutará una CONSULTA DIFERENTE, dependiendo de los argumentos y resultados del ejecución inicial (banderas internas establecidas, etc.), y puede devolver un conjunto de resultados diferente (más pequeño) o ningún resultado en absoluto. Como sugirieron TomJNowell y Laxmana anteriormente, se debe usar $query->posts para obtener los datos de la publicación.

ivanhoe ivanhoe
4 dic 2016 05:20:47
6
17

En realidad, no necesitas dejar de usar el bucle while(). El mismo objeto WP_Post ya está almacenado en la propiedad post:

$query = new WP_Query( $args );

if ( $query->have_posts() ) {

    // algún código aquí si lo deseas.

    while ( $query->have_posts() ) {

        $query->the_post();

        // ahora $query->post es un objeto WP_Post, puedes usar:
        // $query->post->ID, $query->post->post_title, etc.

    }
                
}
1 oct 2015 22:42:27
Comentarios

if es redundante.

Akkumulator Akkumulator
26 ene 2017 15:40:27

No, if no es redundante. En este caso exacto sí lo es, pero en la mayoría de situaciones de producción, tienes código para ejecutar entre el if y el while.

magi182 magi182
27 mar 2017 18:36:32

@magi182 Lo cual lo hace redundante, en este caso exacto. La gente debería aprender cuándo usar esto.

frodeborli frodeborli
3 abr 2017 21:05:31

@frodeborli, Lo bueno de las declaraciones que comienzan con "la gente debería" es que casi siempre puedes sustituirlo por "la gente no lo hará" y la declaración sigue siendo cierta.

magi182 magi182
6 abr 2017 06:28:21

@magi182 Probablemente podría hacer cien líneas de código deseables para complementar el código anterior.

frodeborli frodeborli
9 abr 2017 00:01:09

esta debería ser la respuesta elegida

bysanchy bysanchy
27 oct 2018 09:41:53
Mostrar los 1 comentarios restantes
0

también puedes usar get_posts( $args ) en lugar de wp_Query(), lo que te dará una lista de publicaciones

16 abr 2019 12:17:02