Come ottenere un array di dati di post dal risultato di wp_query?
-
-
Una differenzaimportante datenere amente tra l'accesso diretto ai dati deiposte l'utilizzo deitag delmodello è chei filtrinon vengono applicati ai datie alcunefunzionalitàpotrebberononfunzionare.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 risposta
- voti
-
- 2012-08-11
Dovresti leggereil riferimento allafunzioneper WP_Query nel codice di WordPress.Lì haimoltiesempi daguardare.Senon desiderieseguireil ciclo sul set di risultati utilizzando un
while
,puoi otteneretuttii post restituiti dalla query conWP_Query
nellaproprietàposts
.Adesempio
$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; }
-
Tuttavia,nessuno degliesempi a cuiti colleghimostra comeelaborarei post.Quindi è unbene chetu abbia risposto,peccato chenon lo abbianonella documentazione.Un altro suggerimento: se staifacendo una corrispondenza su unpost unicopuoi usare unafunzione come questa con `'posts_per_page'=> 1`in args.`funzione wp_queryfirstpost ($ args) { $ q=nuovo WP_Query ($ args); $pp=$ q->get_posts (); $firstpost=false;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: sei un santo!Ottimoper aggirareget_the_title/ID/younameit.@rofflox: You are a saint! Great for circumventing get_the_title/ID/younameit.
- 0
- 2015-04-30
- Vial
-
Dovrestiinvece usare `$ query->posts`,` $ query->get_posts () `attiverà una riesecuzione dell'analisi della querye ulteriori query di databasenonnecessarieYou 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
-
$ query->get_posts ();nonfunziona comeprevisto.Non sono sicuro delperché,ma restituiscemenopost rispetto alla query.Vedi qui: 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
-
Questa risposta è chiaramente sbagliata,quando crei unnuovo WP_Query con alcuni argomentiilmetodoget_posts () viene chiamatointernamenteimmediatamentee NON DOVRESTI CHIAMARLO DI NUOVO!Se lo chiami dinuovo comemostratonell'esempio sopra,eseguirà una query DIVERSA,a seconda degli argomentie dei risultati dell'esecuzioneiniziale (set diflaginterni,ecc.),Epuòpotenzialmente restituire un set di risultati diverso (piùpiccolo)onessun risultato.Come suggerito sopra da TomJNowelle Laxmana,si dovrebbe usare $ query->postsper ottenerei dati delpost.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
In realtà,non ènecessario rifiutarsi di usareil ciclo
while()
.Lo stesso oggetto WP_Post ègiàmemorizzatonellaproprietàpost
:$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" è ridondante.`if` is redundant.
- 2
- 2017-01-26
- Akkumulator
-
No,"if"non è ridondante.In questo casoesatto lo è,manellamaggiorparte delle situazioni diproduzione,hai del codice daeseguiretraif e 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 Il che lo rende ridondante,in questo casoesatto.Lepersone dovrebberoimparare quando usarlo.@magi182 Which makes it redundant, in this exact case. People should learn when to use this.
- 2
- 2017-04-03
- frodeborli
-
@frodeborli,La cosabella delle affermazioni cheiniziano con "lepersone dovrebbero" è chepuoi quasi sempre sostituire "lepersonenon lofaranno"e l'affermazione continua aessere vera.@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 Potreiprobabilmentefare un centinaio di righe di codiceper completareil codice sopra.@magi182 I could probably make a hundred nice to have code lines to complement the above code.
- 1
- 2017-04-08
- frodeborli
-
questa dovrebbeessere la risposta sceltathis should be the chosen answer
- 0
- 2018-10-27
- bysanchy
-
- 2019-04-16
puoi anche usare
get_posts( $args )
invece diwp_Query()
,cheti darà unelenco dipostyou can also use
get_posts( $args )
instead ofwp_Query()
, which will give you a list of posts
Quando siesegue una query conilmetodo WP_Query,ho ottenuto un oggetto.Capisco cheposso quindifareil cicloper visualizzaregli oggetti.Mailmio obiettivo ènon visualizzarenulla,invece,voglio ottenere alcuni dati dipostfacendo qualcosa come "foreach ...".Comeposso ottenere una serie di dati dipost cheposso scorreree ottenere dati?