wp_queryの結果から投稿データの配列を取得するにはどうすればよいですか?
-
-
投稿データに直接アクセスする場合とテンプレートタグを使用する場合の重要な違いは、フィルターがデータに適用されず、一部の機能が機能しなくなる可能性があることです.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 回答
- 投票
-
- 2012-08-11
WordPressコーデックスの
WP_Queryの関数リファレンスを読む必要があります.そこには見るべき例がたくさんあります. while
を使用して結果セットをループしたくない場合は、プロパティposts <の
WP_Query
を使用してクエリによって返されるすべての投稿を取得できます./code>.例
$ query=new WP_Query(array( 'post_type'=&gt; 'page')); $posts=$ query-&gt;posts; foreach($posts as $post){ //自分の仕事をします. //エコー$post-&gt;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; }
-
ただし、リンク先の例はいずれも、投稿の処理方法を示していません.ですから、あなたが答えたのは良いことです、彼らがドキュメントにそれを持っていないのは残念です.別のヒント:一意の投稿で一致を行う場合は、引数に `'posts_per_page'=> 1`を指定してこのような関数を使用できます.`関数wp_queryfirstpost($ args){ $ q=new WP_Query($ args); $pp=$ q->get_posts(); $firstpost=false;if($pp)$firstpost=$pp [0]; wp_reset_postdata(); $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:あなたは聖人です!get_the_title/ID/younameitを回避するのに最適です.@rofflox: You are a saint! Great for circumventing get_the_title/ID/younameit.
- 0
- 2015-04-30
- Vial
-
代わりに `$ query->posts`を使用する必要があります.`$ query->get_posts()`はクエリ解析の再実行と追加の不要なデータベースクエリをトリガーしますYou 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();期待どおりに機能していません.理由はわかりませんが、クエリよりも少ない投稿が返されます.ここを参照してください: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
-
この答えは明らかに間違っています.いくつかの引数を使用して新しいWP_Queryを作成すると、メソッドget_posts()がすぐに内部的に呼び出され、再度呼び出すべきではありません.上記の例に示すように再度呼び出すと、最初の実行からの引数と結果(内部フラグセットなど)に応じて、異なるクエリが実行され、異なる(より小さな)結果のセットが返される可能性があります.または結果がまったくありません.TomJNowellとLaxmanaが上記で提案したように、投稿データを取得するには$ query->postsを使用する必要があります.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
実際には、
while()
ループの使用を拒否する必要はありません.同じWP_Postオブジェクトがすでに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`は冗長です.`if` is redundant.
- 2
- 2017-01-26
- Akkumulator
-
いいえ、 `if`は冗長ではありません.この場合はそうですが、ほとんどの本番環境では、ifと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これは、まさにこの場合、冗長になります.人々はこれをいつ使うべきかを学ぶべきです.@magi182 Which makes it redundant, in this exact case. People should learn when to use this.
- 2
- 2017-04-03
- frodeborli
-
@frodeborli、「people should」で始まるステートメントの良いところは、ほとんどの場合「people willnot」に置き換えることができ、ステートメントは引き続きtrueとしてテストされることです.@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上記のコードを補完するコード行があれば、おそらく100を作ることができます.@magi182 I could probably make a hundred nice to have code lines to complement the above code.
- 1
- 2017-04-08
- frodeborli
-
これが選ばれるべき答えですthis should be the chosen answer
- 0
- 2018-10-27
- bysanchy
-
- 2019-04-16
get_posts( $args )
の代わりにwp_Query()
を使用することもできます.これにより、投稿のリストが表示されますyou can also use
get_posts( $args )
instead ofwp_Query()
, which will give you a list of posts
WP_Queryメソッドを使用してクエリを実行すると、オブジェクトが取得されました.その後、ループを実行してコンテンツを表示できることを理解しています.しかし、私の目標は何も表示しないことです.代わりに、「foreach ...」のようなことをして投稿データを取得したいと思います.ループしてデータを取得できる投稿データの配列を取得するにはどうすればよいですか?