カスタムループ後のwp_reset_postdata()またはwp_reset_query()


42

いくつかのものを読んquery_reset_postdataquery_reset_query、私を混乱させます。例えば:

  1. wp_reset_postdataとwp_reset_queryの両方を一緒に使用する必要はありますか?

  2. http://www.poststat.us/properly-reset-wordpress-query/

上記では、query_reset_postdata()「個別のクエリ」を使用する場合にのみ使用する必要があると述べています。example2にはコメントがあります。

WP_Query( $args ) = wp_reset_postdata();

そして

query_posts ( $args ) = wp_reset_query();

そしてwp_reset_query、あなたはquery_postsを使用するべきではないので、本当に使用すべきではありません!?

WP Codexではwp_reset_query()、カスタムループの後に使用する必要があると記載されています(最初の例)http://codex.wordpress.org/Function_Reference/wp_reset_query

コーデックスは間違っていますか?

回答:


66

2つの違いは

  • wp_reset_query() -メインクエリが元のメインクエリにリセットされていることを確認する
  • wp_reset_postdata()-グローバル$postがメインクエリの現在の投稿に復元されていることを確認します。

実際、ソースを見ると、がwp_reset_query()呼び出されていることがわかりますwp_reset_postdata()。この2つの唯一の違いは、次の行です。

$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];

(でwp_reset_query())。したがってwp_reset_query()、これら2つのグローバルが異なる場合にのみ必要であり、それquery_posts()はどこかで使用されている場合にのみ発生します。

いつ使用するべきですか?

簡単に言えば:

  • wp_reset_postdata() -すべてのカスタムの直後 WP_Query()
  • wp_reset_query() -使用するすべてのループの直後 query_posts()

wp_reset_queryを使用する必要があります

はい、しかし、それはを使用しquery_posts()た後にのみ必要です。あなたが指摘したように、あなたは決して使うべきではないquery_posts()。したがって、使用しquery_posts()いない場合は、呼び出す必要はありませんwp_reset_query()(代わりにwp_reset_postdata()

要するに、のwp_reset_query()代わりに使用すべきではないということではなくwp_reset_postdata()、必要とすべきではないということです!


1
だから基本的にあなたは言っている:wp_reset_postdata()のみを使用し、コーデックスは貧しい人々の例を持っていますか?(正しいことをしたい場合)
bestprogrammerintheworld

1
コーデックスは変更される可能性がありますので、間違ったものになる可能性のある絶対的なステートメントを作成しないようにします。不必要にWP_Query()使用するループの例がありますwp_reset_query()wp_reset_postdata()代わりに使用できますが、害はありません。また、使用する必要があり、使用する必要があるquery_posts()例もあります。コーデックスで述べたように、これは悪い例であり、決して使用すべきではないという意味で「推奨されません」。wp_reset_query()query_posts()
スティーブンハリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.