Cuándo usar WP_query (), query_posts () y pre_get_posts
-
-
Posible duplicado de [¿Cuándo debería usar WP \ _Query vs query \ _posts () vsget \ _posts ()?] (Http://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts)Possible duplicate of [When should you use WP\_Query vs query\_posts() vs get\_posts()?](http://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts)
- 4
- 2016-01-03
- dotancohen
-
@saltcod,ahoraes diferente,WordPressevolucionó,agregué algunos comentariosen comparación con la respuesta aceptada [aquí] (http://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-posts/250523 # 250523).@saltcod, now is different, WordPress evolved, I added few comments in comparison to the accepted answer [here](http://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-posts/250523#250523).
- 0
- 2016-12-28
- prosti
-
5 respuestas
- votos
-
- 2012-05-01
Tiene razón al decir:
Nuncamás use
query_posts
pre_get_posts
pre_get_posts
es unfiltroparamodificar cualquier consulta. Se usa conmayorfrecuenciaparamodificar solo la 'consultaprincipal':add_action('pre_get_posts','wpse50761_alter_query'); function wpse50761_alter_query($query){ if( $query->is_main_query() ){ //Do something to main query } }
(También comprobaría que
is_admin()
devuelve false ,aunqueestopuede ser redundante). La consultaprincipal apareceen susplantillas como:if( have_posts() ): while( have_posts() ): the_post(); //The loop endwhile; endif;
Si alguna vez siente lanecesidad deeditarestebucle,use
pre_get_posts
.es decir,sitiene latentación de utilizarquery_posts()
,utilicepre_get_posts
en su lugar.WP_Query
La consultaprincipales unainstanciaimportante de un
WP_Query object
. WordPress lo usapara decidir quéplantilla usar,porejemplo,y cualquier argumento que sepase a la URL (porejemplo,paginación) se canaliza aesainstancia del objetoWP_Query
.Parabucles secundarios (porejemplo,en barras laterales o listas de 'publicaciones relacionadas'),querrá crear supropiainstancia separada del objeto
WP_Query
. P.ej.$my_secondary_loop = new WP_Query(...); if( $my_secondary_loop->have_posts() ): while( $my_secondary_loop->have_posts() ): $my_secondary_loop->the_post(); //The secondary loop endwhile; endif; wp_reset_postdata();
Aviso
wp_reset_postdata();
:esto se debe a queel ciclo secundario anulará la variableglobal$post
queidentifica la 'publicación actual'. Básicamente,esto restableceel$post
en el queestamos.get_posts ()
Estoesesencialmente un contenedorpara unainstancia separada de un objeto
WP_Query
. Esto devuelve unamatriz de objetos depublicación. Losmétodos utilizadosen el ciclo anterior yanoestán disponiblespara usted. Estonoes un 'Bucle',simplemente unamatriz de objetos depublicación.<ul> <?php global $post; $args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 ); $myposts = get_posts( $args ); foreach( $myposts as $post ) : setup_postdata($post); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; wp_reset_postdata(); ?> </ul>
En respuesta a suspreguntas
- Utilice
pre_get_posts
paramodificar su consultaprincipal. Utilice un objetoWP_Query
separado (método 2)parabucles secundariosen laspáginas de laplantilla. - Si deseamodificar la consulta delbucleprincipal,use
pre_get_posts
.
You are right to say:
Never use
query_posts
anymorepre_get_posts
pre_get_posts
is a filter, for altering any query. It is most often used to alter only the 'main query':add_action('pre_get_posts','wpse50761_alter_query'); function wpse50761_alter_query($query){ if( $query->is_main_query() ){ //Do something to main query } }
(I would also check that
is_admin()
returns false - though this may be redundant.). The main query appears in your templates as:if( have_posts() ): while( have_posts() ): the_post(); //The loop endwhile; endif;
If you ever feel the need to edit this loop - use
pre_get_posts
. i.e. If you are tempted to usequery_posts()
- usepre_get_posts
instead.WP_Query
The main query is an important instance of a
WP_Query object
. WordPress uses it to decide which template to use, for example, and any arguments passed into the url (e.g. pagination) are all channelled into that instance of theWP_Query
object.For secondary loops (e.g. in side-bars, or 'related posts' lists) you'll want to create your own separate instance of the
WP_Query
object. E.g.$my_secondary_loop = new WP_Query(...); if( $my_secondary_loop->have_posts() ): while( $my_secondary_loop->have_posts() ): $my_secondary_loop->the_post(); //The secondary loop endwhile; endif; wp_reset_postdata();
Notice
wp_reset_postdata();
- this is because the secondary loop will override the global$post
variable which identifies the 'current post'. This essentially resets that to the$post
we are on.get_posts()
This is essentially a wrapper for a separate instance of a
WP_Query
object. This returns an array of post objects. The methods used in the loop above are no longer available to you. This isn't a 'Loop', simply an array of post object.<ul> <?php global $post; $args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 ); $myposts = get_posts( $args ); foreach( $myposts as $post ) : setup_postdata($post); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; wp_reset_postdata(); ?> </ul>
In response to your questions
- Use
pre_get_posts
to alter your main query. Use a separateWP_Query
object (method 2) for secondary loops in the template pages. - If you want to alter the query of the main loop, use
pre_get_posts
.
-
Entonces,¿hay algúnescenarioen el que uno vaya directamente aget_posts ()en lugar de WP_Query?So is there any scenario when one would go straight to get_posts() rather than WP_Query?
- 0
- 2012-08-25
- urok93
-
@drtanz - sí.Digamos,porejemplo,quenonecesitapaginación opublicacionesfijasen laparte superior;en estos casos,`get_posts ()`esmáseficiente.@drtanz - yes. Say for instance you don't need pagination, or sticky posts at the top - in these instances `get_posts()` is more efficient.
- 0
- 2012-08-25
- Stephen Harris
-
¿Peroesono agregaría una consulta adicionalen la quepodríamosmodificarpre_get_postsparamodificar la consultaprincipal?But wouldn't that add an extra query where we could just modify pre_get_posts to modify the main query?
- 1
- 2012-08-26
- urok93
-
@drtanz -noestaría usando `get_posts ()`para la consultaprincipal -espara consultas secundarias.@drtanz - you wouldn't be using `get_posts()` for the main query - its for secondary queries.
- 0
- 2012-08-26
- Stephen Harris
-
En suejemplo de WP_Query,si cambia $my_secondary_loop->the_post ();to $my_post=$my_secondary_loop->next_post ();puedeevitartener que recordar usar wp_reset_postdata () siempre que use $my_postpara hacer lo quenecesita hacer.In your WP_Query example, if you change $my_secondary_loop->the_post(); to $my_post = $my_secondary_loop->next_post(); you can avoid having to remember to use wp_reset_postdata() as long as you use $my_post to do what you need to do.
- 0
- 2015-09-18
- Privateer
-
@Privateer Noes así,`WP_Query ::get_posts ()`establece `global $post;`@Privateer Not so, `WP_Query::get_posts()` sets `global $post;`
- 0
- 2015-09-19
- Stephen Harris
-
@StephenHarris Acabo demirar la clase de consulta yno la veo.Lo verifiquéprincipalmenteporquenunca uso wp_reset_postdataporque siempre hago consultas deestamanera.Está creando unnuevo objeto ytodos los resultadosestán contenidosen él.@StephenHarris I just looked through the query class and don't see it. I checked mostly because I never use wp_reset_postdata because I always do queries this way. You are creating a new object and all of the results are contained within it.
- 0
- 2015-09-19
- Privateer
-
@Privateer - lo siento,errortipográfico,`WP_Query ::the_post ()`,consulte: https://github.com/WordPress/WordPress/blob/759f3d894ce7d364cf8bfc755e483ac2a6d85653/wp-includes/query.php#L3732@Privateer - sorry, typo, `WP_Query::the_post()`, see: https://github.com/WordPress/WordPress/blob/759f3d894ce7d364cf8bfc755e483ac2a6d85653/wp-includes/query.php#L3732
- 0
- 2015-09-19
- Stephen Harris
-
@StephenHarris Right=) Si usasnext_post ()en el objetoen lugar de usarthe_post,nopisas la consultaglobal ynonecesitas recordar usar wp_reset_postdata después.@StephenHarris Right =) If you use next_post() on the object instead of using the_post, you don't step on the global query and don't need to remember to use wp_reset_postdata afterwards.
- 2
- 2015-09-19
- Privateer
-
@Privateer Ah,mis disculpas,parecía haberme confundido.Tiene razón (peronopodría utilizarningunafunción que se refiera al `$post`global,porejemplo,`the_title () `,`the_content () `).@Privateer Ah, my apologies, seemed to have confused myself. You are right (but you would not be able to use any functions which refer to the global `$post` e.g. `the_title()`, `the_content()`).
- 0
- 2015-09-23
- Stephen Harris
-
Verdadero=) Nunca usoninguno deesos,así queno losextraño.True =) I never use any of those so I don't miss them.
- 0
- 2015-09-24
- Privateer
-
@ urok93 A veces hago "get_posts ()" cuandonecesito obtenerpublicaciones relacionadas con ACF,especialmente si solo hay una.Pensadoen estandarizarmisplantillas,estoy considerando reescribirlas comoinstancias de WP_Query.@urok93 I sometimes `get_posts()` when I need to get ACF related posts, especially if there's only one. Thought to standardize my templates I'm considering rewriting them as WP_Query instances.
- 0
- 2018-02-14
- Slam
-
- 2012-05-01
Hay dos contextos diferentespara losbucles:
- Bucle principal que ocurre según la solicitud de URL y seprocesa antes de que se carguen lasplantillas
- Bucles secundarios que suceden de cualquier otraforma,llamados desde archivos deplantilla o de otromodo
Elproblema con
query_posts ()
es quees unbucle secundarioel queintenta serelprincipal yfallaestrepitosamente. Por lotanto,olvídate de queexiste.Paramodificarelbucleprincipal
- no use
query_posts()
- utiliceelfiltro
pre_get_posts
con$ query- >is_main_query ()
check - utilice alternativamenteelfiltro
request
(unpoco demasiado aproximado,por lo que lo anterioresmejor)
Paraejecutar un ciclo secundario
Utilice
new WP_Query
oget_posts ()
que sonprácticamenteintercambiables (el últimoes un contenedor delgadoparaelprimero).Para limpiar
Use
wp_reset_query ()
si usóquery_posts ()
ojugó con$ wp_query
global directamente,por lo que casinunca lonecesitará.Use
wp_reset_postdata ()
si usóthe_post ()
osetup_postdata ()
o si usó$post ynecesito restaurarelestadoinicial de las cosas relacionadas con lapublicación.
There are two different contexts for loops:
- main loop that happens based on URL request and is processed before templates are loaded
- secondary loops that happen in any other way, called from template files or otherwise
Problem with
query_posts()
is that it is secondary loop that tries to be main one and fails miserably. Thus forget it exists.To modify main loop
- don't use
query_posts()
- use
pre_get_posts
filter with$query->is_main_query()
check - alternately use
request
filter (a little too rough so above is better)
To run secondary loop
Use
new WP_Query
orget_posts()
which are pretty much interchangeable (latter is thin wrapper for former).To cleanup
Use
wp_reset_query()
if you usedquery_posts()
or messed with global$wp_query
directly - so you will almost never need to.Use
wp_reset_postdata()
if you usedthe_post()
orsetup_postdata()
or messed with global$post
and need to restore initial state of post-related things.-
Rarst significaba `wp_reset_postdata ()`Rarst meant `wp_reset_postdata()`
- 4
- 2012-06-01
- Gregory
-
- 2012-09-16
Existenescenarios legítimospara usar
query_posts($query)
,porejemplo:-
Quieresmostrar una lista depublicaciones opublicaciones detipo depublicaciónpersonalizadaen unapágina (usando unaplantilla depágina)
-
Quieres que lapaginación deesaspublicacionesfuncione
Ahorabien,¿por qué querríamostrarloen unapáginaen lugar de utilizar unaplantilla de archivo?
-
Esmásintuitivopara un administrador (¿su cliente?):pueden ver lapáginaen las 'Páginas'
-
Esmejor agregarlo a losmenús (sin lapágina,tendrían que agregar la URL directamente)
-
Si deseamostrar contenido adicional (texto,miniatura depublicación o cualquiermeta contenidopersonalizado)en laplantilla,puede obtenerlofácilmente de lapágina (ytodotiene más sentidoparael clientetambién). Vea si usó unaplantilla de archivo,necesitaría codificarel contenido adicional o usar,porejemplo,opciones detema/complemento (lo que lo hacemenosintuitivoparael cliente)
Aquí hay un código deejemplo simplificado (queestaríaen laplantilla de supágina,porejemplo,page-page-of-posts.php):
/** * Template Name: Page of Posts */ while(have_posts()) { // original main loop - page content the_post(); the_title(); // title of the page the_content(); // content of the page // etc... } // now we display list of our custom-post-type posts // first obtain pagination parametres $paged = 1; if(get_query_var('paged')) { $paged = get_query_var('paged'); } elseif(get_query_var('page')) { $paged = get_query_var('page'); } // query posts and replace the main query (page) with this one (so the pagination works) query_posts(array('post_type' => 'my_post_type', 'post_status' => 'publish', 'paged' => $paged)); // pagination next_posts_link(); previous_posts_link(); // loop while(have_posts()) { the_post(); the_title(); // your custom-post-type post's title the_content(); // // your custom-post-type post's content } wp_reset_query(); // sets the main query (global $wp_query) to the original page query (it obtains it from global $wp_the_query variable) and resets the post data // So, now we can display the page-related content again (if we wish so) while(have_posts()) { // original main loop - page content the_post(); the_title(); // title of the page the_content(); // content of the page // etc... }
Ahora,para que quedeperfectamente claro,podríamosevitarel uso de
query_posts()
aquítambién y usarWP_Query
en su lugar,así:// ... global $wp_query; $wp_query = new WP_Query(array('your query vars here')); // sets the new custom query as a main query // your custom-post-type loop here wp_reset_query(); // ...
Pero,¿por qué haríamoseso cuandotenemos unafuncióntan agradable disponibleparaello?
There are legitimate scenarios for using
query_posts($query)
, for example:You want to display a list of posts or custom-post-type posts on a page (using a page template)
You want to make pagination of those posts work
Now why would you want to display it on a page instead of using an archive template?
It's more intuitive for an administrator (your customer?) - they can see the page in the 'Pages'
It's better for adding it to menus (without the page, they'd have to add the url directly)
If you want to display additional content (text, post thumbnail, or any custom meta content) on the template, you can easily get it from the page (and it all makes more sense for the customer too). See if you used an archive template, you'd either need to hardcode the additional content or use for example theme/plugin options (which makes it less intuitive for the customer)
Here's a simplified example code (which would be on your page template - e.g. page-page-of-posts.php):
/** * Template Name: Page of Posts */ while(have_posts()) { // original main loop - page content the_post(); the_title(); // title of the page the_content(); // content of the page // etc... } // now we display list of our custom-post-type posts // first obtain pagination parametres $paged = 1; if(get_query_var('paged')) { $paged = get_query_var('paged'); } elseif(get_query_var('page')) { $paged = get_query_var('page'); } // query posts and replace the main query (page) with this one (so the pagination works) query_posts(array('post_type' => 'my_post_type', 'post_status' => 'publish', 'paged' => $paged)); // pagination next_posts_link(); previous_posts_link(); // loop while(have_posts()) { the_post(); the_title(); // your custom-post-type post's title the_content(); // // your custom-post-type post's content } wp_reset_query(); // sets the main query (global $wp_query) to the original page query (it obtains it from global $wp_the_query variable) and resets the post data // So, now we can display the page-related content again (if we wish so) while(have_posts()) { // original main loop - page content the_post(); the_title(); // title of the page the_content(); // content of the page // etc... }
Now, to be perfectly clear, we could avoid using
query_posts()
here too and useWP_Query
instead - like so:// ... global $wp_query; $wp_query = new WP_Query(array('your query vars here')); // sets the new custom query as a main query // your custom-post-type loop here wp_reset_query(); // ...
But, why would we do that when we have such a nice little function available for it?
-
Brian,graciasporeso.Heestado luchandopara quepre_get_postsfuncioneen unapágina EXACTAMENTEen elescenario que usted describe:el clientenecesita agregar campos/contenidopersonalizados a lo que de otromodo sería unapágina de archivo,por lo queesnecesario crear una "página";el clientenecesita ver algopara agregar almenú denavegación,ya que agregar unenlacepersonalizado losescapa;etc. ¡+1 demí!Brian, thanks for that. I've been struggling to get pre_get_posts to work on a page in EXACTLY the scenario you describe: client needs to add custom fields/content to what otherwise would be an archive page, so a "page" needs to be created; client needs to see something to add to nav menu, as adding a custom link escapes them; etc. +1 from me!
- 2
- 2012-12-13
- Will Lanni
-
Esotambién sepuede hacer usando "pre_get_posts".Hiceesoparatener una "páginaprincipalestática" queenumeramistipos depublicacionespersonalizadasen un ordenpersonalizado y con unfiltropersonalizado.Estapáginatambiénestápaginada.Consulteestapreguntapara ver cómofunciona: http://wordpress.stackexchange.com/questions/30851/how-to-use-a-custom-post-type-archive-as-front-page/30854 Entonces,en resumen,todavíano hay unescenariomás legítimopara usar query_posts;)That can also be done using "pre_get_posts". I did that to have a "static front page" listing my custom post types in a custom order and with a custom filter. This page is also paginated. Check out this question to see how it works: http://wordpress.stackexchange.com/questions/30851/how-to-use-a-custom-post-type-archive-as-front-page/30854 So in short, there is still no more legitimate scenario for using query_posts ;)
- 3
- 2015-01-12
- 2ndkauboy
-
Porque "Debetenerseen cuenta que usarestopara reemplazar la consultaprincipalen unapáginapuede aumentar lostiempos de carga de lapágina,en elpeor de los casos,duplicando omás la cantidad detrabajonecesario. Sibien esfácil de usar,lafuncióntambiénespropensa a confusiónyproblemasmás adelante ".Fuente http://codex.wordpress.org/Function_Reference/query_postsBecause "It should be noted that using this to replace the main query on a page can increase page loading times, in worst case scenarios more than doubling the amount of work needed or more. While easy to use, the function is also prone to confusion and problems later on." Source http://codex.wordpress.org/Function_Reference/query_posts
- 2
- 2015-03-09
- Claudiu Creanga
-
Esta respuestaestodotipo deerrores.Puede crear una "Página"en WP con lamisma URL queeltipo depublicaciónpersonalizada.Porejemplo,si su CPTes Bananas,puede obtener unapágina llamada Bananas con lamisma URL.Entoncesterminarías con siteurl.com/bananas.Siempre quetenga archive-bananas.phpen su carpeta detemas,usará laplantilla y "anulará"esapáginaen su lugar.Como seindicaen uno de los otros comentarios,el uso deeste "método" creael doble de carga detrabajopara WP,por lo que NO debe utilizarsenunca.THis answer is all kinds of wrong. You can create a "Page" in WP with the same URL as the Custom post type. EG if your CPT is Bananas, you can get a page named Bananas with the same URL. Then you'd end up with siteurl.com/bananas. As long as you have archive-bananas.php in your theme folder, then it will use the template and "override" that page instead. As stated in one of the other comments, using this "method" creates twice the workload for WP, thus should NOT ever be used.
- 0
- 2015-06-19
- Hybrid Web Dev
-
- 2015-01-23
Modifico la consulta de WordPress desdefunctions.php:
//unfortunately, "IS_PAGE" condition doesn't work in pre_get_posts (it's WORDPRESS behaviour) //so you can use `add_filter('posts_where', ....);` OR modify "PAGE" query directly into template file add_action( 'pre_get_posts', 'myFunction' ); function myFunction($query) { if ( ! is_admin() && $query->is_main_query() ) { if ( $query->is_category ) { $query->set( 'post_type', array( 'post', 'page', 'my_postType' ) ); add_filter( 'posts_where' , 'MyFilterFunction_1' ) && $GLOBALS['call_ok']=1; } } } function MyFilterFunction_1($where) { return (empty($GLOBALS['call_ok']) || !($GLOBALS['call_ok']=false) ? $where : $where . " AND ({$GLOBALS['wpdb']->posts}.post_name NOT LIKE 'Journal%')"; }
I modify WordPress query from functions.php:
//unfortunately, "IS_PAGE" condition doesn't work in pre_get_posts (it's WORDPRESS behaviour) //so you can use `add_filter('posts_where', ....);` OR modify "PAGE" query directly into template file add_action( 'pre_get_posts', 'myFunction' ); function myFunction($query) { if ( ! is_admin() && $query->is_main_query() ) { if ( $query->is_category ) { $query->set( 'post_type', array( 'post', 'page', 'my_postType' ) ); add_filter( 'posts_where' , 'MyFilterFunction_1' ) && $GLOBALS['call_ok']=1; } } } function MyFilterFunction_1($where) { return (empty($GLOBALS['call_ok']) || !($GLOBALS['call_ok']=false) ? $where : $where . " AND ({$GLOBALS['wpdb']->posts}.post_name NOT LIKE 'Journal%')"; }
-
estaríainteresadoen veresteejemplo,pero donde la cláusulaestáen metapersonalizada.would be interested to see this example but where clause is on custom meta.
- 0
- 2017-03-03
- Andrew Welch
-
- 2016-12-28
Solopara resumir algunasmejoras a la respuesta aceptada,ya que WordPressevolucionó coneltiempo y algunas cosas son diferentes ahora (cinco años después):
pre_get_posts
es unfiltroparamodificar cualquier consulta. Se usa conmayorfrecuenciaparamodificar solo la 'consultaprincipal':En realidad,es ungancho de acción. Noes unfiltro y afectará a cualquier consulta.
La consultaprincipal apareceen susplantillas como:
if( have_posts() ): while( have_posts() ): the_post(); //The loop endwhile; endif;
En realidad,estotampocoes cierto. Lafunción
have_posts
iterael objetoglobal $wp_query
quenoestá relacionado solo con la consultaprincipal.global $wp_query;
tambiénpuedemodificarse con las consultas secundarias.function have_posts() { global $wp_query; return $wp_query->have_posts(); }
get_posts ()
Estoesesencialmente un contenedorpara unainstancia separada de un objeto WP_Query.
En realidad,hoyen día
WP_Query
es una clase,así quetenemos unainstancia de una clase.
Para concluir:en elmomentoen que @StephenHarrisescribió lomásprobablees quetodoestofuera cierto,pero coneltiempo las cosasen WordPress han cambiado.
Just to outline some improvements to the accepted answer since WordPress evolved over the time and some things are different now (five years later):
pre_get_posts
is a filter, for altering any query. It is most often used to alter only the 'main query':Actually is an action hook. Not a filter, and it will affect any query.
The main query appears in your templates as:
if( have_posts() ): while( have_posts() ): the_post(); //The loop endwhile; endif;
Actually, this is also not true. The function
have_posts
iterates theglobal $wp_query
object that is not related only to the main query.global $wp_query;
may be altered with the secondary queries also.function have_posts() { global $wp_query; return $wp_query->have_posts(); }
get_posts()
This is essentially a wrapper for a separate instance of a WP_Query object.
Actually, nowadays
WP_Query
is a class, so we have an instance of a class.
To conclude: At the time @StephenHarris wrote most likely all this was true, but over the time things in WordPress have been changed.
-
Técnicamente,todo sonfiltrosbajoel capó,las acciones son solo unfiltro simple.Perotiene razón aquí,es una acción quepasa un argumentopor referencia,queesen lo que se diferencia de las accionesmás simples.Technically, it's all filters under the hood, actions are just a simple filter. But you are correct here, it's an action that passes an argument by reference, which is how it differs from more simple actions.
- 0
- 2016-12-28
- Milo
-
`get_posts` devuelve unamatriz de objetos depublicación,no un objeto` WP_Query`,por lo quetodavíaes correcto.y `WP_Query` siempre ha sido una clase,instancia de un objeto class=.`get_posts` returns an array of post objects, not a `WP_Query` object, so that is indeed still correct. and `WP_Query` has always been a class, instance of a class = object.
- 0
- 2016-12-28
- Milo
-
Gracias,@Milo,correctopor alguna razón,tenía unmodelo demasiado simplificadoen mi cabeza.Thanks, @Milo, correct from some reason I had oversimplified model in my head.
- 0
- 2016-12-28
- prosti
Leí @nacin's No conoces Query ayer yfueenviado a unpequeño agujero de consulta. Antes de ayer,estaba (incorrectamente) usando
query_posts()
paratodosmisnecesidades de consulta. Ahora soy unpocomásinteligente sobreel uso deWP_Query()
,perotodavíatiene algunas áreasgrises.Lo que creo que sé con certeza:
Si hagobucles adicionales en cualquier lugar de unapágina (en labarra lateral,en unpie depágina,cualquiertipo de "publicaciones relacionadas",etc.),quiero usar
WP_Query()
. Puedo usareso repetidamenteen una solapágina sinningún daño. (¿derecho?).Lo queno sé con certeza
pre_get_posts
frente aWP_Query()
? ¿Debería usarpre_get_posts
paratodo ahora?if have_posts : while have_posts : the_post
yescribomi propia < a href="http://codex.wordpress.org/Function_Reference/WP_Query" rel="noreferrer">WP_Query()
? Omodifico la salida usandopre_get_posts
en misfunciones.php archivo?< wenttl;dr"
Las reglas detl; dr queme gustaríaextraer deesto son:
query_posts
WP_Query()
Graciasportu sabiduría
Terry
PD: He visto y leído: ¿Cuándo debería usar WP_Query vs query_posts () vsget_posts ()? Lo que agrega otra dimensión -
get_posts
. Perono se ocupa depre_get_posts
en absoluto.