Quando usar WP_Query (), Query_Posts () e Pre_Get_Posts
-
-
Possível duplicado de [quando você deve usar wp \ _Query vs query \ _posts () vsget \ _posts ()?] (Http://wordpress.stackexchange.com/Questions/1753/Que-WPE-Query-vs-consultas-posts-vs-get-get-get-get-get-get-get-get-getPossible 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,agora é diferente,WordPressevoluiu,adicionei alguns comentáriosem comparação com a resposta aceita [aqui] (http://wordpress.stackexchange.com/Questions/50761/when-to-s-wp-quer-posts-e-pré-get-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 respostas
- votos
-
- 2012-05-01
Vocêestá certoem dizer:
.
Nunca use
query_posts
maispré_get_posts
pré_get_posts
é umfiltro,para alterar qualquer Consulta. Émais usadopara alterar apenas a "consultaprincipal":add_action ('pre_get_posts','wpse50761_alter_query'); função wpse50761_alter_query ($ consulta) { if ($ query- >is_main_query ()) { //Faça algopara a consultaprincipal } }
(Eutambém verifiquei que
is_admin ()
retorna false -emboraissopossa ser redundante.). A consultaprincipal apareceem seusmodelos como:se (tem_posts ()): enquanto (tem_posts ()):the_post (); //O laço Endwile; fim se;
Se você acha que anecessidade deeditareste loop - use
pré_get_posts
.i.e. Se você étentado a usarQuery_Posts ()
- Usepré_get_posts
em vez disso.wp_query
A consultaprincipal é umainstânciaimportante de um
WP_Query Object
. O WordPress usapara decidir qualmodelo usar,porexemplo,e quaisquer argumentospassados para o URL (porexemplo,paginação) sãotodos canalizadosparaessainstância do objetowp_query
.Para loops secundários (porexemplo,em barras laterais,ou 'listas depostagens relacionadas) você vai querer criar suaprópriainstância separada do objeto
wp_query
. Porexemplo.$my_secondary_loop=novo WP_Query (...); if ($my_secondary_loop- > heve_posts ()): while ($my_secondary_loop- > heve_posts ()): $my_secondary_loop- >the_post (); //o loop secundário Endwile; fim se; WP_RESET_POSTDATA ();
Aviso
wp_reset_postdata ();
-isto éporque o loop secundário substituirá a variávelglobal$post
queidentifica a "postagem atual". Isso é redefinidoessencialmente quepara o$post
estamos ligados.get_posts ()
Este éessencialmente uminvólucropara umainstância separada de um objeto wp_query . Isso retorna umamatriz de objetospostais. Osmétodos usados no loop acimanãoestãomais disponíveispara você. Estenão é um 'loop',simplesmente umamatriz depós-objeto.
& lt; ul > & lt;?php postagemglobal; $ args=matray ('numberposts'=> 5,'deslocamento'=> 1,'categoria'=> 1); $myposts=get_posts ($ args); foreach ($myposts como $post): setup_postdata ($post);? > & lt; li >e lt; a href="& lt;phpthe_permalink ();" > "& lt;"phpthe_title ();? >/lt;/a > & lt;/li > & lt;? PHP EndForach; WP_RESET_POSTDATA ();? > & lt;/ul >
Em resposta às suasperguntas
- .
- Use
pré_get_posts
para alterar sua consultaprincipal. Use um objeto wp_query separado (código 2)para loops secundáriosnaspáginas demodelo. - Se você quiser alterar a consulta do loopprincipal,use
pré_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
.
-
Então,há algum cenário quando alguémiria diretopara Get_Posts ()em vez 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 - sim.Diga,porexemplo,vocênãoprecisa depaginação,oupostspegajososnotopo -nessasinstâncias,"Get_Posts ()" émaiseficiente.@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
-
Masissonão adicionaria uma consultaextra ondepoderíamos apenasmodificar Pre_Get_Postsparamodificar a 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 - vocênãoestaria usando "get_posts ()"para a consultaprincipal - épara consultas secundárias.@drtanz - you wouldn't be using `get_posts()` for the main query - its for secondary queries.
- 0
- 2012-08-26
- Stephen Harris
-
No seuexemplo WP_Query,se você alterar $my_secondary_loop->the_post ();para $my_post=$my_secondary_loop->next_post ();Vocêpodeevitarter que lembrar de usar WP_RESET_POSTDATA () desde que você use $my_postparafazer o queprecisafazer.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
-
@Privateernão é assim,`WP_Query ::get_posts ()` sets `global $post;`@Privateer Not so, `WP_Query::get_posts()` sets `global $post;`
- 0
- 2015-09-19
- Stephen Harris
-
@Stephenharris Eu apenas olhei através da classe de consultae não vejoisso.Eu verifiqueiprincipalmenteporqueeununca uso wp_reset_postdataporqueeu sempre resolvo dessamaneira.Vocêestá criando umnovo objetoe todos os resultadosestão contidos dentro dele.@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 - Desculpe,Typo,`WP_Query ::the_post ()`,veja: https://github.com/wordpress/wordpress/blob/759f3cf8bfc7554cf8bfc755e483ac2a6d85653/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 à direita=) Se você usar o Next_Post ()no objetoem vez de usar o_post,nãopisarána consultaglobale nãoprecisa lembrar de usar wp_reset_postdata depois.@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,minhas desculpas,pareciame confundir.Vocêestá certo (mas vocênão seria capaz de usarnenhumafunção que se refere àmensagemglobal '$post'e.g. `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
-
True=) Eununca usonenhum desses,entãoeunão sintofalta deles.True =) I never use any of those so I don't miss them.
- 0
- 2015-09-24
- Privateer
-
@ urok93 Eu às vezes `get_posts ()` quandopreciso obterposts relacionados ao ACF,especialmente se há apenas um.Pensamentoparapadronizarmeusmodelos,estou considerando reescrevê-los comoinstâncias 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
Existem dois contextos diferentespara loops:
- loopprincipal que acontece combasena solicitação de URLe éprocessado antes demodelos serem carregados
- loops secundários que acontecem de qualquer outraforma,chamados de arquivos demodelo ou de outraforma
Problema com
Query_Posts ()
é que é um loop secundário quetenta serprincipale falhamiseravelmente. Assim,esqueça queexiste.paramodificar o loopprincipal
- não use
query_posts ()
- use
pre_get_posts
filtro com$ query- >is_main_query ()
cheque - use alternadamente
filtro (umpouco difícil demais,então acima émelhor)
paraexecutar loop secundário
Use
Novo WP_Query
ouget_posts ()
que sãopraticamenteintercambiáveis (último éinvólucrofinopara anterior).para limpar
Use
wp_reset_query ()
Se você usouQuery_Posts ()
ou confundido comglobal $ WP_Query
diretamente -então você quasenuncaprecisará.Use
wp_reset_postdata ()
Se você usouthe_post ()
ousetup_postdata ()
ou confundido comglobal$post
e precisa restaurar oestadoinicial das coisaspós-relacionadas.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 significava `WP_RESET_POSTDATA ()`Rarst meant `wp_reset_postdata()`
- 4
- 2012-06-01
- Gregory
-
- 2012-09-16
Existem cenários legítimospara usar
query_posts($query)
,porexemplo:- .
-
Você desejaexibir uma lista depostagens oupostspersonalizadosem umapágina (usando ummodelo depágina)
-
Você desejafazer apaginação dessesposts work
Agorapor que você desejaexibi-loem umapáginaem vez de usar ummodelo de arquivo?
- .
-
émaisintuitivopara um administrador (seu cliente?) - Elespodem ver apáginanas 'páginas'
-
Émelhor adicioná-lo aosmenus (sem apágina,elesteriam que adicionar diretamente o URL)
-
Se você quiserexibir conteúdo adicional (texto,pós-miniatura,ou qualquer conteúdo demetapersonalizado)nomodelo,vocêpodefacilmente obtê-lo dapágina (etudofazmais sentidopara o clientetambém). Veja se você usou ummodelo de arquivo,vocêprecisará hardbode o conteúdo adicional ou usar,porexemplo,opções detema/plugin (o quetornamenosintuitivopara o cliente)
Aquiestá um código deexemplo simplificado (queestariano seumodelo depágina -e.página-página-de-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... }
Agora,para serperfeitamente claro,poderíamosevitar o uso
query_posts()
aquitambéme useWP_Query
em vez disso - como assim:// ... 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(); // ...
Mas,por quefaríamosisso quandotemos umapequenafunção disponívelparaisso?
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,obrigadoporisso.Eutenho lutadopara obterpré_get_postsparafuncionarem umapáginaexatamenteno cenário que você descreve: o clienteprecisa adicionar campos/conteúdopersonalizados ao que de outraforma seria umapágina de arquivo,então uma "página"precisa ser criada;O clienteprecisa ver algopara adicionar aomenu Nav,como adicionar um linkpersonalizadoescapa deles;etc. +1 demim!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
-
Issotambémpode serfeito usando "Pre_Get_Posts".Eufizissoparater uma "primeirapáginaestática" listandomeustipos depostagempersonalizadosem uma ordempersonalizadae com umfiltropersonalizado.Estapáginatambém épaginada.Confiraesta questãopara ver comofunciona: http://wordpress.stackexchange.com/questions/30851/How-to-use-a-custom-post-type-archive-as-front-page/30854 Então,em suma,aindanão há cenáriomais legítimopara usar consulta_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 "Deve-senotar que usarissopara substituir a consultaprincipalem umapáginapode aumentar ostempos de carga dapágina,nos cenáriosmais do que dobrando a quantidade detrabalhonecessária oumais. Enquantofácil de usar,afunçãotambém épropensa a confusãoeproblemasmaistarde. "Fonte http://codex.wordpress.org/function_reference/query_posts.Because "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 resposta étudo que éerrado.Vocêpode criar uma "página"no WP com omesmo URL dotipopersonalizado.Porexemplo,se o seu CPT ébanana,vocêpode obter umapágina chamada Bananas com omesmo URL.Então você acabaria com o siteurl.com/bananas.Contanto que vocêtenha Archive-Bananas.phpnapasta dotema,ele usará omodeloe "substituir"essapágina.Como afirmadoem um dos outros comentários,o uso deste "método" cria o dobro da carga detrabalhopara o WP,portanto,não deve ser usado.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
Eumodifique a consulta do WordPress dasfunções.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%')"; }
-
Estariainteressadoem veresteexemplo,mas onde a cláusulaestánometapersonalizada.would be interested to see this example but where clause is on custom meta.
- 0
- 2017-03-03
- Andrew Welch
-
- 2016-12-28
apenaspara delinear algumasmelhoriasna resposta aceita,já que o WordPressevoluiu ao longo dotempoe algumas coisas são diferentes agora (cinco anos depois):
.
pre_get_posts
é umfiltro,para alterar qualquer consulta. Émais usadopara alterar apenas a "consultaprincipal":Na verdade,é umgancho de ação. Não umfiltro,e isso afetará qualquer consulta.
.
A consultaprincipal apareceem seusmodelos como:
if( have_posts() ): while( have_posts() ): the_post(); //The loop endwhile; endif;
Na verdade,issotambémnão é verdade. Afunção
have_posts
itera o objetoglobal $wp_query
quenãoestá relacionado apenas para a consultaprincipal.global $wp_query;
pode ser alterado com as consultas secundáriastambém.function have_posts() { global $wp_query; return $wp_query->have_posts(); }
.
get_posts ()
Este éessencialmente um wrapperpara umainstância separada de um objeto WP_Query.
Na verdade,hojeem dia
WP_Query
é uma aula,portanto,temos umainstância de uma classe.
Para concluir:nomomento @stephenharrisescreveumaisprováveltudoissoera verdade,mas ao longo dotempoem que as coisasno WordPressforam alteradas.
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.
-
Tecnicamente,étudofiltros sob o capô,ações são apenas umfiltro simples.Mas vocêestá correto aqui,é uma ação quepassa um argumentopor referência,que é comoela difere de açõesmais 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` retorna umamatriz de objetospostais,não um objeto` wp_query`,entãoisso é realmente correto.e `WP_Query 'semprefoi uma classe,instância de uma classe=objeto.`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
-
Obrigado,@Milo,correto apartir de algummotivoeutinha omodelo simplistanaminha cabeça.Thanks, @Milo, correct from some reason I had oversimplified model in my head.
- 0
- 2016-12-28
- prosti
Eu li @nacin's vocênão sabe consulta onteme foienviado umpouco de um orifício de coelho consultando. Antes de ontem,euestava (erroneamente) usando
query_posts()
paratodosminhasnecessidades de consulta. Agora sou umpoucomais sábio sobre o usoWP_Query()
,Mas aindatem algumas áreas cinzentas.o queeu acho que sei com certeza:
Seeuestiverfazendo loops adicionaisem qualquer lugarem umapágina -nabarra lateral,em um rodapé,qualquertipo de "posts relacionados",etc. - queroestar usando
WP_Query()
. Euposso usarisso repetidamenteem uma únicapágina sem qualquer dano. (direita?).o queeunão sei com certeza
.- quandoeu uso @nacin's
- Quandoeu queromodificar o loopem umapágina demodelo - Vamos dizer queeu queromodificar umapágina de arquivamento detaxonomia -eu removo o
pre_get_posts
vs.WP_Query()
? Devo usarpre_get_posts
Paratudo agora?if have_posts : while have_posts : the_post
partee escrevermeupróprio < Um href="http://codex.wordpress.org/function_reference/wp_query" rel="Noreferro">WP_Query()
? Oueumodificar a saída usandopre_get_posts
nasminhasfunções. arquivophp?tl; dr
O TL; Regras do Dr. Gostaria de desenhar disso são:
.- nunca use
- aoexecutar várias consultasem uma únicapágina,use
- Aomodificar um loop,façaisso __________________.
query_posts
maisWP_Query()
Obrigadopor qualquer sabedoria
Terry
ps:eu vie ler: Quando você deve usar WP_Query vs Query_Posts () vsget_posts ()? que adiciona outra dimensão -
get_posts
. Masnão lida compre_get_posts
em tudo.