WP_query()、query_posts()、およびpre_get_postsを使用する場合
-
-
[いつ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、今は違います、WordPressは進化しました、受け入れられた答えと比較していくつかのコメントを追加しました[ここ](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 回答
- 投票
-
- 2012-05-01
あなたは言うのが正しいです:
query_posts
はもう使用しないでくださいpre_get_posts
pre_get_posts
は、任意のクエリ.これは、「メインクエリ」のみを変更するために最もよく使用されます:add_action('pre_get_posts','wpse50761_alter_query'); function wpse50761_alter_query($query){ if( $query->is_main_query() ){ //Do something to main query } }
(
is_admin()
がfalse を返すことも確認しますが、これは冗長かもしれません.)メインクエリはテンプレートに次のように表示されます:if( have_posts() ): while( have_posts() ): the_post(); //The loop endwhile; endif;
このループを編集する必要があると感じた場合は、
pre_get_posts
を使用してください.つまり、query_posts()
を使用したい場合は-代わりにpre_get_posts
を使用してください.WP_Query
メインクエリは、
WP_Query object
の重要なインスタンスです.たとえば、WordPressはこれを使用して、使用するテンプレートを決定します.URLに渡された引数(ページ付けなど)はすべて、WP_Query
オブジェクトのインスタンスに送られます.セカンダリループ(サイドバーや「関連する投稿」リストなど)の場合は、
WP_Query
オブジェクトの独自のインスタンスを作成する必要があります.例えば.$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();
注意
wp_reset_postdata();
-これは、セカンダリループが「現在の投稿」を識別するグローバルな$post
変数をオーバーライドするためです.これにより、基本的に、現在の$post
にリセットされます.get_posts()
これは基本的に、
WP_Query
オブジェクトの個別のインスタンスのラッパーです.これにより、postオブジェクトの配列が返されます.上記のループで使用されているメソッドは使用できなくなりました.これは「ループ」ではなく、単に投稿オブジェクトの配列です.<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>
質問への回答
-
pre_get_posts
を使用して、メインクエリを変更します.テンプレートページのセカンダリループには、別のWP_Query
オブジェクト(メソッド2)を使用します. - メインループのクエリを変更する場合は、
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
.
-
では、WP_Queryではなくget_posts()に直接アクセスするシナリオはありますか?So is there any scenario when one would go straight to get_posts() rather than WP_Query?
- 0
- 2012-08-25
- urok93
-
@ drtanz-はい.たとえば、ページ付けや上部のスティッキーポストは必要ないとします.これらの場合、 `get_posts()`の方が効率的です.@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
-
しかし、それは、pre_get_postsを変更してメインクエリを変更できるクエリを追加しませんか?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-メインクエリには `get_posts()`を使用しません-セカンダリクエリには使用します.@drtanz - you wouldn't be using `get_posts()` for the main query - its for secondary queries.
- 0
- 2012-08-26
- Stephen Harris
-
WP_Queryの例では、$my_secondary_loop->the_post();を変更した場合.to $my_post=$my_secondary_loop->next_post();$my_postを使用して必要なことを実行する限り、wp_reset_postdata()を使用することを忘れないでください.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そうではありません.`WP_Query::get_posts() `は`global $post; `を設定します.@Privateer Not so, `WP_Query::get_posts()` sets `global $post;`
- 0
- 2015-09-19
- Stephen Harris
-
@StephenHarrisクエリクラスを調べたところ、表示されません.私はいつもこの方法でクエリを実行するため、wp_reset_postdataを使用したことがないため、主にチェックしました.新しいオブジェクトを作成していて、すべての結果がその中に含まれています.@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-申し訳ありませんが、タイプミス、 `WP_Query ::the_post()`、参照: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=)the_postを使用する代わりにオブジェクトでnext_post()を使用する場合、グローバルクエリを踏む必要はなく、後でwp_reset_postdataを使用することを覚えておく必要はありません.@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ああ、お詫びしますが、混乱していたようです.あなたは正しいです(ただし、グローバルな `$post`を参照する関数(例:`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
-
True=)私はそれらのどれも使用しないので、それらを見逃すことはありません.True =) I never use any of those so I don't miss them.
- 0
- 2015-09-24
- Privateer
-
@ urok93 ACF関連の投稿を取得する必要がある場合、特に1つしかない場合は、「get_posts()」を実行することがあります.テンプレートを標準化することを考えて、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
ループには2つの異なるコンテキストがあります:
- メインループはURLリクエストに基づいて発生し、テンプレートが読み込まれる前に処理されます
- セカンダリループは、テンプレートファイルなどから呼び出され、他の方法で発生します
query_posts()
の問題は、メインループになろうとして、惨めに失敗するのはセカンダリループであるということです.したがって、それが存在することを忘れてください.メインループを変更するには
-
query_posts()
を使用しないでください
-
$ query-&gt;is_main_query()
チェックでpre_get_posts
フィルターを使用する - 代わりに
request
フィルターを使用します(少し粗すぎるので上記の方が良いです)
セカンダリループを実行するには
ほとんど互換性のある
new WP_Query
またはget_posts()
を使用します(後者は前者の薄いラッパーです).クリーンアップするには
query_posts()
を使用した場合、またはグローバルな$ wp_query
を直接使用した場合は、wp_reset_query()
を使用します.そのため、ほとんど必要ありません.the_post()
またはsetup_postdata()
を使用した場合、またはグローバルな$post
wp_reset_postdata()を使用してください>そしてポスト関連のものの初期状態を復元する必要があります.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.-
ラーストは `wp_reset_postdata()`を意味しましたRarst meant `wp_reset_postdata()`
- 4
- 2012-06-01
- Gregory
-
- 2012-09-16
query_posts($query)
を使用するための正当なシナリオがあります.例:-
(ページテンプレートを使用して)ページに投稿またはカスタム投稿タイプの投稿のリストを表示したい
-
これらの投稿のページ付けを機能させたい
アーカイブテンプレートを使用する代わりに、なぜそれをページに表示したいのですか?
-
管理者(顧客?)にとってはより直感的です-管理者は「ページ」でページを見ることができます
-
メニューに追加することをお勧めします(ページがない場合は、URLを直接追加する必要があります)
-
テンプレートに追加のコンテンツ(テキスト、投稿のサムネイル、またはカスタムメタコンテンツ)を表示する場合は、ページから簡単に取得できます(そして、すべてが顧客にとってより意味があります).アーカイブテンプレートを使用したかどうかを確認するには、追加のコンテンツをハードコーディングするか、たとえばテーマ/プラグインオプションを使用する必要があります(これにより、顧客にとって直感的ではなくなります)
ここに簡略化されたサンプルコードがあります(これはページテンプレートにあります-例: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... }
これで、完全に明確にするために、ここでも
query_posts()
の使用を避け、代わりにWP_Query
を使用できます-次のように:// ... 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(); // ...
しかし、このような素敵な小さな機能を利用できるのに、なぜそうするのでしょうか?
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?
-
ブライアン、ありがとう.あなたが説明したまさにそのシナリオで、pre_get_postsをページ上で機能させるのに苦労してきました.クライアントはカスタムフィールド/コンテンツをアーカイブページに追加する必要があるため、「ページ」を作成する必要があります.カスタムリンクを追加するとエスケープされるため、クライアントはナビゲーションメニューに追加するものを確認する必要があります.など.私から+1!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
-
これは、「pre_get_posts」を使用して行うこともできます.カスタム投稿タイプをカスタムオーダーでカスタムフィルター付きで一覧表示する「静的フロントページ」を作成するためにこれを行いました.このページもページ付けされています.この質問をチェックして、どのように機能するかを確認してください:http://wordpress.stackexchange.com/questions/30851/how-to-use-a-custom-post-type-archive-as-front-page/30854 つまり、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
-
「これを使用してページのメインクエリを置き換えると、ページの読み込み時間が長くなる可能性があることに注意してください.最悪の場合、必要な作業量が2倍以上になります.使いやすい一方で、この機能も混乱しがちです.後で問題が発生します.」ソース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
-
この答えはあらゆる種類の間違いです.カスタム投稿タイプと同じURLを使用してWPで「ページ」を作成できます.たとえば、CPTがバナナの場合、同じURLでバナナという名前のページを取得できます.そうすると、siteurl.com/bananasになってしまいます.テーマフォルダにarchive-bananas.phpがある限り、テンプレートが使用され、代わりにそのページが「上書き」されます.他のコメントの1つで述べられているように、この「方法」を使用すると、WPのワークロードが2倍になるため、使用しないでください.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
Functions.phpからWordPressクエリを変更します:
//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%')"; }
-
この例を見たいと思いますが、where句はカスタムメタにあります.would be interested to see this example but where clause is on custom meta.
- 0
- 2017-03-03
- Andrew Welch
-
- 2016-12-28
WordPressは時間の経過とともに進化し、現在(5年後)はいくつかの点で異なっているため、受け入れられた回答に対するいくつかの改善点の概要を説明します.
pre_get_posts
は、クエリを変更するためのフィルターです.これは、「メインクエリ」のみを変更するために最もよく使用されます:実際にはアクションフックです.フィルタではなく、クエリに影響します.
メインクエリはテンプレートに次のように表示されます:
if( have_posts() ): while( have_posts() ): the_post(); //The loop endwhile; endif;
実際、これも真実ではありません.関数
have_posts
は、メインクエリにのみ関連付けられていないglobal $wp_query
オブジェクトを繰り返し処理します.global $wp_query;
は、セカンダリクエリでも変更できます.function have_posts() { global $wp_query; return $wp_query->have_posts(); }
get_posts()
これは基本的に、WP_Queryオブジェクトの個別のインスタンスのラッパーです.
実際、現在
WP_Query
はクラスであるため、クラスのインスタンスがあります.
結論:@StephenHarrisが書いた時点では、おそらくこれはすべて真実でしたが、時間の経過とともにWordPressの状況は変化しました.
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.
-
技術的には、それはすべて内部のフィルターであり、アクションは単なるフィルターです.しかし、ここでは正しいです.これは、参照によって引数を渡すアクションです.これが、より単純なアクションとの違いです.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`は、` WP_Query`オブジェクトではなく、postオブジェクトの配列を返すので、それは確かに正しいです.`WP_Query`は常にクラスであり、class=objectのインスタンスです.`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
-
おかげで、@ Milo、頭の中でモデルを単純化しすぎていた理由から正解です.Thanks, @Milo, correct from some reason I had oversimplified model in my head.
- 0
- 2016-12-28
- prosti
@nacin's あなたは昨日クエリを知らないと、ちょっとしたクエリのうさぎの穴に送られました.昨日まで、私は(間違って)
query_posts()
をすべてに使用していました私のクエリのニーズ.WP_Query()
の使用について、少し賢くなりました.しかし、まだいくつかの灰色の領域があります.確かに知っていると思うこと:
ページの任意の場所(サイドバー、フッター、あらゆる種類の「関連する投稿」など)で追加ループを作成する場合は、
WP_Query()
.害を及ぼすことなく、1ページで繰り返し使用できます. (正しい?).よくわからないこと
pre_get_posts
とWP_Query()
?今、すべてにpre_get_posts
を使用する必要がありますか?if have_posts : while have_posts : the_post
の部分を削除して、独自のを記述しますか? a href="http://codex.wordpress.org/Function_Reference/WP_Query" rel="noreferrer">
WP_Query()
?または、関数でpre_get_posts
を使用して出力を変更しますか.phpファイル?tl; dr
これから引き出したいtl; drルールは次のとおりです.
query_posts
はもう使用しないでくださいWP_Query()
を使用します. a>知恵をありがとう
テリー
ps:私は見たり読んだりしました: WP_Query、query_posts()、get_posts()をいつ使用する必要がありますか?これにより、別の次元が追加されます—
get_posts
.ただし、pre_get_posts
はまったく処理しません.