¿Cómo obtener una matriz de datos de publicación del resultado de wp_query?
-
-
Una diferenciaimportante ateneren cuentaentre acceder directamente a los datos de laspublicaciones y usaretiquetas deplantillaes que losfiltrosno se aplican a los datos y algunasfuncionespuedenfallar.An important difference to keep in mind between accessing post data directly versus using template tags is that filters are not applied to the data and some functionality may break.
- 2
- 2016-12-30
- Milo
-
3 respuestas
- votos
-
- 2012-08-11
Debe leer la referencia defunciónpara WP_Query en el códice de WordPress.Ahítienesmuchosejemplosparamirar.Sino desea recorrerel conjunto de resultados usando un
while
,puede obtenertodas laspublicaciones devueltaspor la consulta conWP_Query
en lapropiedadposts
.Porejemplo
$query = new WP_Query( array( 'post_type' => 'page' ) ); $posts = $query->posts; foreach($posts as $post) { // Do your stuff, e.g. // echo $post->post_name; }
You should read the function reference for WP_Query on the WordPress codex. There you have a lot of examples to look at. If you don't want to loop over the result set using a
while
, you could get all posts returned by the query with theWP_Query
in the propertyposts
.For example
$query = new WP_Query( array( 'post_type' => 'page' ) ); $posts = $query->posts; foreach($posts as $post) { // Do your stuff, e.g. // echo $post->post_name; }
-
Sinembargo,ninguno de losejemplos a los queenlaza demuestra cómoprocesarpublicaciones.Entoncesesbueno que hayas respondido,lástima queno lotenganen la documentación.Otro consejo: siestás haciendo una coincidenciaen unapublicación única,puedes usar unafunción comoesta con `'posts_per_page'=> 1`en argumentos.`function wp_queryfirstpost ($ args) { $ q=new WP_Query ($ args); $pp=$ q->get_posts (); $firstpost=falso;if ($pp) $firstpost=$pp [0]; wp_reset_postdata (); return $firstpost; } `None of the examples you link to demonstrates how to process posts, though. So it's good that you answered, pity they don't have it in the documentation. Another tip: If you're doing a match on a unique post you can use a function like this with `'posts_per_page'=>1` in args. `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; }`
- 1
- 2014-03-21
- Henrik Erlandsson
-
@rofflox: ¡Eres un santo!Excelenteparaeludirget_the_title/ID/younameit.@rofflox: You are a saint! Great for circumventing get_the_title/ID/younameit.
- 0
- 2015-04-30
- Vial
-
Debería usar `$ query->posts`en su lugar,` $ query->get_posts () `activará unanuevaejecución del análisis de la consulta y consultas adicionalesinnecesarias a labase de datosYou should use `$query->posts` instead, `$query->get_posts()` will trigger a re-running of the query parsing and additional unnecessary database queries
- 8
- 2015-11-01
- Tom J Nowell
-
$ consulta->get_posts ();nofunciona como seesperaba.Noestoy seguro depor qué,pero devuelvemenospublicaciones que la consulta.Vea aquí: https://stackoverflow.com/questions/25395299/how-do-i-get-wordpress-wp-query-get-posts-on-multiple-categories-to-work$query->get_posts(); is not working as expected. Not sure why but it returns fewer post than the query. See here: https://stackoverflow.com/questions/25395299/how-do-i-get-wordpress-wp-query-get-posts-on-multiple-categories-to-work
- 0
- 2016-11-12
- Laxmana
-
Esta respuestaes simplementeincorrecta,cuando crea unanueva WP_Query con algunos argumentos,elmétodoget_posts () se llamainternamente deinmediato y NO DEBE LLAMARLO DE NUEVO.Si lo vuelve a llamar como semuestraen elejemplo anterior,ejecutará una consulta DIFERENTE,dependiendo de los argumentos y resultados de laejecucióninicial (conjunto deindicadoresinternos,etc.),ypotencialmentepuede devolver un conjunto de resultados diferente (máspequeño)oningún resultado.Como TomJNowell y Laxmana sugirieron anteriormente,uno debe usar $ query->postspara obtener los datos de lapublicación.This answer is plain wrong, when you create a new WP_Query with some arguments the method get_posts() is internally called right away and you SHOULD NOT CALL IT AGAIN! If you call it again as shown in the example above it will run a DIFFERENT query, depending on the arguments and results form the initial run (internal flags set, etc..), and can potentially return a different (smaller) set of results or no results at all. As TomJNowell and Laxmana suggested above one should use $query->posts to get the post data.
- 1
- 2016-12-04
- ivanhoe
-
- 2015-10-01
En realidad,noesnecesario que seniegue a utilizarelbucle
while()
.Elmismo objeto WP_Post yaestá almacenadoen lapropiedadpost
:$query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); // now $query->post is WP_Post Object, use: // $query->post->ID, $query->post->post_title, etc. } }
Actually, you don't need to refuse to use
while()
loop. Same WP_Post Object is already stored inpost
property:$query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); // now $query->post is WP_Post Object, use: // $query->post->ID, $query->post->post_title, etc. } }
-
`if`es redundante.`if` is redundant.
- 2
- 2017-01-26
- Akkumulator
-
No,"si"noes redundante.Eneste casoexacto loes,peroen lamayoría de las situaciones deproducción,tiene códigoparaejecutarentreelif yel while.No, `if` is not redundant. In this exact case it is, but in most production situations, you have code to execute between the if and the while.
- 2
- 2017-03-27
- magi182
-
@magi182 Lo que lo hace redundante,en este casoexacto.Lagente debería aprender cuándo usaresto.@magi182 Which makes it redundant, in this exact case. People should learn when to use this.
- 2
- 2017-04-03
- frodeborli
-
@frodeborli,Lobueno de las declaraciones que comienzan con "lagente debería"es que casi siempre sepuede sustituir "lagente no lo hará" y la declaración aún seprueba como verdadera.@frodeborli, The nice thing about statements that start with "people should" is that you can almost always substitute "people won't" and the statement still tests as true.
- 4
- 2017-04-06
- magi182
-
@magi182 Probablementepodría hacer cientos de líneas de códigopara complementarel código anterior.@magi182 I could probably make a hundred nice to have code lines to complement the above code.
- 1
- 2017-04-08
- frodeborli
-
esta debería ser la respuestaelegidathis should be the chosen answer
- 0
- 2018-10-27
- bysanchy
-
- 2019-04-16
tambiénpuede usar
get_posts( $args )
en lugar dewp_Query()
,que le dará una lista depublicacionesyou can also use
get_posts( $args )
instead ofwp_Query()
, which will give you a list of posts
Cuandoejecuto una consulta conelmétodo WP_Query,obtengo un objeto.Entiendo que luegopuedo hacerel cicloparamostrarproductos.Peromi objetivonoesmostrarnada,sino que quiero obtener algunos datos de laspublicaciones haciendo algo como "foreach ...".¿Cómopuedo obtener unamatriz de datos depublicaciones quepueda recorrer y obtener datos?