WordPressのループについて

  • ループには「メインループ」と「サブループ」がある。

メインループ(=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 で復元。

コメント