web-dev-qa-db-ja.com

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

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();

Query_postsを使用すべきではないので、実際にはwp_reset_queryを使用しないでください。

WP Codexでは、カスタムループの後にwp_reset_query()を使うべきであると述べています(最初の例) http://codex.wordpress.org/Function_Reference/wp_reset_query

それでコーデックは間違っていますか?

両者の違いは、

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

確かに、 source を見ると、wp_reset_query()wp_reset_postdata()を呼び出すことがわかります。両者の間の唯一の違いはこの行です:

$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()を使うべきではないということではありません。

59
Stephen Harris