Comment obtenir un tableau de données de publication à partir du résultat wp_query?
-
-
Une différenceimportante àgarder à l'espritentre l'accès direct aux données depublicationet l'utilisation debalises demodèleest que lesfiltresne sontpas appliqués aux donnéeset que certainesfonctionnalitéspeuvent êtreinterrompues.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 réponses
- votes
-
- 2012-08-11
Vous devriez lire la référence de lafonctionpour WP_Query sur le codex WordPress.Là,vous avezbeaucoup d'exemples àexaminer.Si vousne souhaitezpasparcourir l'ensemble de résultatsen utilisant un
while
,vouspouvez obtenirtous lesmessages renvoyéspar la requête avec leWP_Query
dans lapropriétéposts
.Parexemple
$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; }
-
Cependant,aucun desexemples auxquels vous créez un lienne montre commenttraiter lespublications.Donc c'estbien que vous ayez répondu,dommage qu'ilsne l'aientpas dans la documentation.Un autre conseil: si vousfaites une correspondance sur un article unique,vouspouvez utiliser unefonction comme celle-ci avec ``posts_per_page '=> 1` dans args.`fonction wp_queryfirstpost ($ args) { $ q=nouveau 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: Vous êtes un saint!Idéalpour contournerget_the_title/ID/younameit.@rofflox: You are a saint! Great for circumventing get_the_title/ID/younameit.
- 0
- 2015-04-30
- Vial
-
Vous devriez utiliser `$ query->posts` à laplace,` $ query->get_posts () `déclenchera unenouvelleexécution de l'analyse des requêteset des requêtes debase de donnéesinutiles supplémentairesYou 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 ();nefonctionnepas commeprévu.Jene saispaspourquoi,maisil renvoiemoins demessages que la requête.Voirici: 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
-
Cette réponseesttout simplementerronée,lorsque vous créez unenouvelle WP_Query avec quelques arguments,laméthodeget_posts ()estimmédiatement appeléeen interneet vous NE DEVRIEZ PAS LA REVOYER!Si vous l'appelez ànouveau commeindiqué dans l'exemple ci-dessus,ilexécutera une requête DIFFÉRENTE,en fonction des argumentset des résultats de l'exécutioninitiale (ensemble d'indicateursinternes,etc.),et peutpotentiellement renvoyer unensemble de résultats différent (pluspetit)oupas de résultats dutout.Comme TomJNowellet Laxmana l'ont suggéré ci-dessus,ilfaut utiliser $ query->postspour obtenir les données depublication.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
Enfait,vousn'avezpasbesoin de refuser d'utiliser laboucle
while()
.Lemême objet WP_Postest déjà stocké dans lapropriété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`est redondant.`if` is redundant.
- 2
- 2017-01-26
- Akkumulator
-
Non,«if»n'estpas redondant.Dans ce casprécis,c'est le cas,mais dans laplupart des situations deproduction,vous avez du code àexécuterentre leif et le 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 Ce qui le rend redondant,dans ce casprécis.Lesgens devraient savoir quand l'utiliser.@magi182 Which makes it redundant, in this exact case. People should learn when to use this.
- 2
- 2017-04-03
- frodeborli
-
@frodeborli,Labonne chose àpropos des déclarations qui commencentpar "lesgens devraient"est que vouspouvezpresquetoujours remplacer "lesgensne leferontpas"et la déclarationesttoujourstestée comme vraie.@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 Jepourraisprobablementfaire une centaine de lignes de codepour compléter le code ci-dessus.@magi182 I could probably make a hundred nice to have code lines to complement the above code.
- 1
- 2017-04-08
- frodeborli
-
cela devrait être la réponse choisiethis should be the chosen answer
- 0
- 2018-10-27
- bysanchy
-
- 2019-04-16
vouspouvez également utiliser
get_posts( $args )
au lieu dewp_Query()
,qui vous donnera une liste demessagesyou can also use
get_posts( $args )
instead ofwp_Query()
, which will give you a list of posts
Lors de l'exécution d'une requête avec laméthode WP_Query,j'ai un objet.Je comprends queje peuxensuitefaire labouclepour afficher destrucs.Mais,mon objectifn'estpas d'afficher quoi que ce soit,à laplace,je veux obtenir des données depublicationen faisant quelque chose comme "foreach ...".Commentpuis-je obtenir untableau de données depublication queje peuxparcouriret obtenir des données?