Wie erhalte ich ein Array von Post-Daten aus dem Ergebnis von wp_query?
-
-
Ein wichtiger Unterschied zwischen dem direkten Zugriff auf Post-Daten und der Verwendung von Vorlagen-Tagsbesteht darin,dass keine Filter auf die Daten angewendet werden undeinige Funktionenmöglicherweisenichtfunktionieren.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 Antworten
- Stimmen
-
- 2012-08-11
Sie sollten die Funktionsreferenzfür WP_Query im WordPress-Codex lesen.Dortgibt es viele Beispiele zu sehen.Wenn Sie die Ergebnismengenichtmit einem
while
durchlaufenmöchten,können Sie alle von der Abfrage zurückgegebenen Beiträgemit demWP_Query
in der Eigenschaftposts
. Zum Beispiel
$ query=new WP_Query (Array ('post_type'=> 'page')); $posts=$ query- >posts; foreach ($posts als $post) { //Mach deine Sachen,z. //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; }
-
Keines der Beispiele,auf die Sie verweisen,zeigtjedoch,wie Beiträge verarbeitet werden.Esist alsogut,dass Siegeantwortet haben,schade,dass sieesnichtin der Dokumentation haben.Ein weiterer Tipp: Wenn Sieein Matchfüreinen eindeutigen Beitrag durchführen,können Sieeine solche Funktionmit "posts_per_page"=> 1in args verwenden.`Funktion wp_queryfirstpost ($ args) { $ q=neue 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: Dubistein Heiliger!Hervorragendgeeignet,umget_the_title/ID/younameit zu umgehen.@rofflox: You are a saint! Great for circumventing get_the_title/ID/younameit.
- 0
- 2015-04-30
- Vial
-
Sie sollten stattdessen "$ query->posts" verwenden. "$ Query->get_posts ()" lösteine erneute Ausführung der Abfrageanalyse und zusätzliche unnötige Datenbankabfragen ausYou 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 ();funktioniertnicht wieerwartet.Ich weißnicht warum,aberes wird weniger Post als die Abfrage zurückgegeben.Siehe hier: 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
-
Diese Antwortisteindeutigfalsch. Wenn Sieeine neue WP_Querymit einigen Argumentenerstellen,wird die Methodeget_posts () sofortintern aufgerufen und Sie sollten sienichterneut aufrufen!Wenn Sieeserneut aufrufen,wieim obigen Beispielgezeigt,wird abhängig von den Argumenten und Ergebnissen desersten Laufs (interne Flagsgesetzt usw.)eine VERSCHIEDENE Abfrage ausgeführt,diemöglicherweiseeine andere (kleinere) Menge von Ergebnissen zurückgibtoder überhaupt keine Ergebnisse.Wie TomJNowell und Laxmana oben vorgeschlagen haben,sollteman $ query->posts verwenden,um die Post-Daten zuerhalten.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
Eigentlichmüssen Sie die Verwendung der
while()
-Schleifenicht ablehnen.Dasgleiche WP_Post-Objektistbereitsin der Eigenschaftpost
gespeichert:$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`ist redundant.`if` is redundant.
- 2
- 2017-01-26
- Akkumulator
-
Nein,`if`istnicht redundant.Ingenau diesem Fallistes so,aberin denmeisten Produktionssituationenmüssen Sie zwischen demif und dem while Code ausführen.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 Wases überflüssigmacht,genauin diesem Fall.Die Leute sollten lernen,wannman dasbenutzt.@magi182 Which makes it redundant, in this exact case. People should learn when to use this.
- 2
- 2017-04-03
- frodeborli
-
@frodeborli,Das Schöne an Aussagen,diemit "Menschen sollten"beginnen,ist,dass Siefastimmer "Menschen werdennicht"ersetzen können und die Aussageimmernoch als wahrgetestet wird.@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 Ich könnte wahrscheinlich hundert schöne Codezeilenmachen,um den obigen Code zuergänzen.@magi182 I could probably make a hundred nice to have code lines to complement the above code.
- 1
- 2017-04-08
- frodeborli
-
Dies sollte diegewählte Antwort seinthis should be the chosen answer
- 0
- 2018-10-27
- bysanchy
-
- 2019-04-16
Sie können auch
zuerhaltenget_posts( $args )
anstelle vonwp_Query()
verwenden,umeine Liste der Beiträgeyou can also use
get_posts( $args )
instead ofwp_Query()
, which will give you a list of posts
Beim Ausführeneiner Abfragemit der WP_Query-Methode wurdeein Objekt angezeigt.Ich verstehe,dassich dann die Schleifemachen kann,um Sachen anzuzeigen.Mein Zielistesjedoch,nichts anzuzeigen. Stattdessenmöchteicheinige Post-Daten abrufen,indemichetwas wie "foreach ..."mache.Wie kannichein Array von Post-Daten abrufen,dieich durchlaufen und Daten abrufen kann?