- ループには「メインループ」と「サブループ」がある。
メインループ(=Wordpressループ)
- メインループはWordpressが自動的に生成するループである。
- WordPress はURLリクエストに応じて、テンプレートファイルが実行される時点で、サイトにアクセスされた URL からクエリ変数を抽出し、それらの条件に一致する記事オブジェクトを取得する。具体的にはWP_Query::get_posts()というメソッドを使用して記事を取得する(=メインループを作成する)。
- 生成されたメインループはグローバル変数 $wp_query に格納される。
- 生成されたメインループを変更するには query_posts() を使う。つまりquery_posts() はグローバル変数 $wp_query を変更する。2015年現在、非推奨となっている。
- 生成されるメインループそのものを変更したなら pre_get_posts アクションを使う。
サブループ
- サブループはユーザーが生成するループである。
- サブループを生成する関数にget_posts()がある。
- get_posts() はグローバル変数 $wp_query には影響を与えない。
ループ&クエリーに関係のある主なグローバル変数
WordPress ループ&クエリーのモヤモヤを解消しよう!という記事で言及されていた内容を下記に引用。
$wp_the_query ….. WP_Query オブジェクト。URL のクエリーバックアップ用。
$wp_query ……… WP_Query オブジェクト。カレントのクエリー。
$posts ………… クエリーを実行して取得した記事オブジェクトの配列。
$post …………. カレントの記事オブジェクト。
上記グローバル変数を上書きする関数
query_posts() …………………… $wp_query を上書き。
the_post(), WP_Query::the_post() ….. $post を上書き。上書きされたグローバル変数を復元する関数
wp_reset_query() …….. $wp_query を $wp_the_query, $post を $wp_query->post で復元。
wp_reset_postdata() ….. $post を $wp_query->post で復元。
コメント