Quando usare WP_query (), query_posts () e pre_get_posts
-
-
Possibile duplicato di [Quando dovresti usare 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,ora è diverso,WordPress si èevoluto,ho aggiuntopochi commenti rispetto alla risposta accettata [qui] (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 risposta
- voti
-
- 2012-05-01
Hai ragione a dire:
Non utilizzaremaipiù
query_posts
pre_get_posts
pre_get_posts
è unfiltro,per alterare qualsiasi query. Viene spesso utilizzatopermodificare solo la "queryprincipale":add_action('pre_get_posts','wpse50761_alter_query'); function wpse50761_alter_query($query){ if( $query->is_main_query() ){ //Do something to main query } }
(Vorrei anche controllare che
is_admin()
restituisca false ,anche sepotrebbeessere ridondante.). La queryprincipale apparenei tuoimodelli come:if( have_posts() ): while( have_posts() ): the_post(); //The loop endwhile; endif;
Semai sentiil bisogno dimodificare questo ciclo,usa
pre_get_posts
. Adesempio,se seitentato di utilizzarequery_posts()
,utilizzainvecepre_get_posts
.WP_Query
La queryprincipale è un'istanzaimportante di un
WP_Query object
. WordPress lo utilizzaper decidere qualemodello utilizzare,adesempio,e tuttigli argomentipassatinell'URL (adesempio l'impaginazione) vengonotutti canalizzatiin quell'istanza dell'oggettoWP_Query
.Peri cicli secondari (adesempionellebarre laterali oneglielenchi di "articoli correlati")ti consigliamo di creare latuaistanza separata dell'oggetto
WP_Query
. Peresempio.$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();
Nota
wp_reset_postdata();
- questoperchéil ciclo secondario sovrascriverà la variabileglobale$post
cheidentificail "post corrente". Questoessenzialmente lo reimposta al$post
in cui citroviamo.get_posts ()
Questo èessenzialmente un wrapperper un'istanza separata di un oggetto
WP_Query
. Ciò restituisce un array di oggettipost. Imetodi utilizzatinel cicloprecedentenon sonopiù disponibili. Questonon è un "Loop",semplicemente un array di oggettipost.<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 risposta alletue domande
- Utilizza
pre_get_posts
permodificare la queryprincipale. Utilizza un oggettoWP_Query
separato (metodo 2)peri cicli secondarinellepagine delmodello. - Se desiderimodificare la query del cicloprincipale,utilizza
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
.
-
Quindi c'è qualche scenarioin cui si andrebbe direttamente aget_posts () anziché a 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ì.Supponiamo,adesempio,dinon averbisogno dell'impaginazione o dipost appiccicosi all'inizio -in questi casi `get_posts ()` èpiùefficiente.@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
-
Ma questonon aggiungerebbe una queryextrain cuipotremmo semplicementemodificarepre_get_postspermodificare la queryprincipale?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 -non useresti `get_posts ()`per la queryprincipale - èper le query secondarie.@drtanz - you wouldn't be using `get_posts()` for the main query - its for secondary queries.
- 0
- 2012-08-26
- Stephen Harris
-
Neltuoesempio WP_Query,se cambi $my_secondary_loop->the_post ();a $my_post=$my_secondary_loop->next_post ();puoievitare di doverti ricordare di usare wp_reset_postdata ()fintanto che usi $my_postperfare quello che devifare.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 Non così,`WP_Query ::get_posts ()`imposta `global $post;`@Privateer Not so, `WP_Query::get_posts()` sets `global $post;`
- 0
- 2015-09-19
- Stephen Harris
-
@StephenHarris Ho appenaesaminato la classe di querye non la vedo.Ho controllatoprincipalmenteperchénon usomai wp_reset_postdataperchéeseguo sempre le queryin questomodo.Stai creando unnuovo oggettoe tuttii risultati sono contenuti al suointerno.@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 - scusa,errore dibattitura,`WP_Query ::the_post ()`,vedi: 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=) Se usinext_post () sull'oggettoinvece di usarethe_post,nonpassi sulla queryglobalee non haibisogno di ricordarti di usare wp_reset_postdatain seguito.@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,lemie scuse,sembravaessermi confuso.Hai ragione (manon sarestiin grado di usarenessunafunzione chefaccia riferimento a "$post"globale,adesempio "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
-
Vero=) Non li usomai,quindinonmi mancano.True =) I never use any of those so I don't miss them.
- 0
- 2015-09-24
- Privateer
-
@ urok93 A volte `get_posts ()` quando hobisogno di riceverepost relativi ad ACF,specialmente se cen'è solo uno.Hopensato di standardizzarei mieimodelli,stopensando di riscriverli comeistanze di 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
Esistono due diversi contestiperi cicli:
- cicloprincipale che si verificain base alla richiesta dell'URLe vieneelaboratoprima del caricamento deimodelli
- secondari loop che si verificanoin qualsiasi altromodo,richiamati dafilemodello o altro
Ilproblema con
query_posts ()
è che è un ciclo secondario che cerca diessere quelloprincipalee falliscemiseramente. Quindi dimentica cheesiste.Permodificareil cicloprincipale
- non utilizzare
query_posts()
- utilizzailfiltro
pre_get_posts
con$ query- >is_main_query ()
check - in alternativa usailfiltro
request
(unpo 'troppo approssimativo quindi èmeglio sopra)
Pereseguireil ciclo secondario
Usa
new WP_Query
oget_posts ()
che sonopraticamenteintercambiabili (quest'ultimo èthin wrapperperilprimo).Per ripulire
Usa
wp_reset_query ()
se hai usatoquery_posts ()
o haimanipolato direttamente$ wp_query
globale,quindinonne avrai quasimaibisogno.Usa
wp_reset_postdata ()
se hai usatothe_post ()
osetup_postdata ()
o hai sbagliato con$post e lanecessità di ripristinare lo statoiniziale delle cose correlate.
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
Esistono scenari legittimiper l'utilizzo di
query_posts($query)
,adesempio:-
Desideri visualizzare unelenco dipost opost ditipopostpersonalizzato su unapagina (utilizzando unmodello dipagina)
-
Vuoifarfunzionare l'impaginazione di questipost
Ora,perché dovresti visualizzarlo su unapaginainvece di utilizzare unmodello di archivio?
-
Èpiùintuitivoper un amministratore (iltuo cliente?):può vedere lapaginanelle "Pagine"
-
Èmeglio aggiungerlo aimenu (senza lapagina,dovrebbero aggiungere direttamente l'URL)
-
Se desideri visualizzare contenuto aggiuntivo (testo,miniatura delpost o qualsiasimeta contenutopersonalizzato) sulmodello,puoi ottenerlofacilmente dallapagina (etutto hapiù senso ancheperil cliente). Verifica se hai utilizzato unmodello di archivio,dovresti o codificareil contenuto aggiuntivo o utilizzare adesempio le opzioni deltema/plug-in (il che lo rendemenointuitivoperil cliente)
Ecco un codice diesempio semplificato (che sarebbe sultuomodello dipagina,ades.pagina-pagina-di-post.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... }
Ora,peressereperfettamente chiari,potremmoevitare di usare
query_posts()
anche quie utilizzareinveceWP_Query
,in questomodo:// ... 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(); // ...
Maperché dovremmofarlo quando abbiamo a disposizione unapiccolafunzione così carina?
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,grazieper questo.Ho lottatoperfarfunzionarepre_get_posts su unapagina ESATTAMENTEnello scenario che descrivi:il cliente deve aggiungere campi/contenutipersonalizzati a quella che altrimenti sarebbe unapagina di archivio,quindi ènecessario creare una "pagina";il cliente deve vedere qualcosa da aggiungere almenu dinavigazione,poiché l'aggiunta di un collegamentopersonalizzatogli sfugge;ecc. +1 dame!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
-
Ciòpuòesserefatto anche utilizzando "pre_get_posts".L'hofattoper avere una "primapagina statica" cheelencai mieitipi dipostpersonalizzatiin un ordinepersonalizzatoe con unfiltropersonalizzato.Anche questapagina èimpaginata.Dai un'occhiata a questa domandaper vedere comefunziona: http://wordpress.stackexchange.com/questions/30851/how-to-use-a-custom-post-type-archive-as-front-page/30854 Quindi,in breve,nonesiste ancora uno scenariopiù legittimoper l'utilizzo di 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
-
Perché "Vanotato che l'utilizzo di questoper sostituire la queryprincipale su unapaginapuò aumentarei tempi di caricamento dellapagina,nei casipeggiori raddoppiando la quantità di lavoronecessaria opiù. Sebbene siafacile da usare,lafunzione è anche soggetta a confusioneeproblemiin seguito. "Fonte 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
-
Questa risposta è sbagliata dituttii tipi.Puoi creare una "Pagina"in WP con lo stesso URL deltipo dipostpersonalizzato.Adesempio,seiltuo CPT è Bananas,puoi ottenere unapagina denominata Bananas con lo stesso URL.Quinditi ritroverai con siteurl.com/bananas.Finché hai archive-bananas.phpnella cartella deltuotema,allora useràilmodelloe "sovrascriverà" quellapagina.Come affermatoin uno degli altri commenti,l'utilizzo di questo "metodo" creail doppio del carico di lavoroper WP,quindi NON dovrebbemaiessere utilizzato.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 query di WordPress dafunctions.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%')"; }
-
sarebbeinteressato a vedere questoesempio,ma la clausola where è sulmetapersonalizzato.would be interested to see this example but where clause is on custom meta.
- 0
- 2017-03-03
- Andrew Welch
-
- 2016-12-28
Giustoper delineare alcunimiglioramenti alla risposta accettatapoiché WordPress si èevolutoneltempoe alcune cose sono diverse ora (cinque anni dopo):
pre_get_posts
è unfiltropermodificare qualsiasi query. Viene spesso utilizzatopermodificare solo la "queryprincipale":In realtà è ungancio d'azione. Non è unfiltroe influirà su qualsiasi query.
La queryprincipale viene visualizzatanei modelli come:
if( have_posts() ): while( have_posts() ): the_post(); //The loop endwhile; endif;
In realtà,anche questonon è vero. Lafunzione
have_posts
itera l'oggettoglobal $wp_query
chenon è correlato solo alla queryprincipale.global $wp_query;
puòesseremodificato anche con le query secondarie.function have_posts() { global $wp_query; return $wp_query->have_posts(); }
get_posts ()
Questo èessenzialmente un wrapperper un'istanza separata di un oggetto WP_Query.
In realtà,oggigiorno
WP_Query
è una classe,quindi abbiamo un'istanza di una classe.
Per concludere: all'epoca @StephenHarris scrivevamoltoprobabilmentetutto ciòera vero,maneltempo le cosein WordPress sono state cambiate.
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,sonotuttifiltri sottoil cofano,le azioni sono solo un semplicefiltro.Ma hai ragione qui,è un'azione chepassa un argomentoper riferimento,che èilmodoin cui differisce dalle azionipiù semplici.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` restituisce un array di oggettipost,non un oggetto` WP_Query`,quindi è ancora corretto.e `WP_Query` è sempre stata una classe,istanza di un oggetto 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
-
Grazie,@Milo,correttoper qualchemotivo avevoin testa unmodello semplificato.Thanks, @Milo, correct from some reason I had oversimplified model in my head.
- 0
- 2016-12-28
- prosti
Ho letto @nacin's Non conosci Query ieried è statoinviato unpo 'come unatana di coniglio. Prima diieri usavo (erroneamente)
query_posts()
pertutti lemie esigenze diinterrogazione. Ora sono unpo 'più saggio sull'utilizzo diWP_Query()
,ma hanno ancora alcune areegrigie.Quello chepenso di sapereper certo:
Se sto creando ulteriori loopin qualsiasipunto di unapagina (nellabarra laterale,in unpiè dipagina,qualsiasitipo di "post correlati"e così via - desidero utilizzare
WP_Query()
. Posso usarlo ripetutamente su una singolapagina senza alcun danno. (destra?).Quello chenon soper certo
pre_get_posts
rispetto aWP_Query()
? Devo utilizzarepre_get_posts
pertutto ora?if have_posts : while have_posts : the_post
e scrivo lamia < a href="http://codex.wordpress.org/Function_Reference/WP_Query" rel="noreferrer">WP_Query()
? Oppuremodifico l'output utilizzandopre_get_posts
nellemie funzioni.php?<"tl;dr"
Le regoletl; dr che vorreitrarre da questo sono:
query_posts
WP_Query()
Grazieper la saggezza
Terry
ps: ho vistoe letto: Quando dovresti usare WP_Query vs query_posts () vsget_posts ()? Che aggiunge un'altra dimensione -
get_posts
. Manon si occupa affatto dipre_get_posts
.