WP_Queryで記事を取得したときはwp_reset_postdataとwp_reset_queryのどっちを使うのか

NO IMAGE

WP_Queryで記事を取得してきたときに、ループ終了後に呪文のように書いているwp_reset_postdata()という関数があります。

さらに、この関数に似ている名前のwp_reset_query()という関数もあり、どっちを使うのかわからなくなってしまう時があります。

この記事ではどちらの関数を使うのが正解か、さらにそれぞれの関数が何をしているのか調べてみました。

結論

まず結論からいうと、WP_Query()で記事取得をしたときはwp_reset_postdata()が正解です。

次にそれぞれの関数が何をしているかというと、どちらの関数もグローバル変数を本来の値にリセットをしているようです。

それぞれ何をリセットしているかというと
wp_reset_postdata()はグローバル変数の$postのリセット
wp_reset_query()はグローバル変数の$wp_queryのリセット
です。

なぜWP_Queryを使ったときは、wp_reset_postdata?

WP_Queryで記事を取得したときは、$postをループ内で変更して記事の情報を取得しているため、ループ終了後はwp_reset_postdata()$postをメインクエリのものに戻してあげる必要があるということです。

wp_reset_queryはいつ使う?

wp_reset_query()はいつ使うのかというと、現在非推奨となっているquery_posts()で記事を取得した場合に使います。

query_posts()ではグローバル変数の$wp_queryに新たに取得したデータを代入するため、記事を取得した後にリセットをしないと本来期待されている動作ができなくなります。

しかし、先ほども書きましたがquery_posts()で記事を取得することは現在非推奨なので、自分自身でグローバル変数の$wp_queryを変更することがない限り、wp_reset_queryは使うことがないと思います。