WordPressの処理フロー
WordPressの処理フローは、MVCとかFluxなどと全然違うみたいなので、ちょっとアウトプットしておきます。
リクエストパラメーターが全ての起点
WordPressにはMVCで定義するようなルーティングがありません。
MVCだとルーティングを定義する事によりURLとコントローラーを対応させ、コントローラーでデータを取得してビューに表示させます。
WordPressではその仕組みではないので、リクエストのパラメーターからデータの取得・テンプレートの選択を行います。
リクエストがあると、まずパラメーターの解析を始めます。解析されたパラメーターは、WPオブジェクトの$wp->query_varsに格納されます。
WPオブジェクトは、パラメーターの解析だけでなく、WordPressの処理全体のフローも担当してます。
リクエストパラメーターの意味
$wp->query_vars変数に保存される値ですが、フィルタリングがかかっています。
実はフィルタリングするためのホワイトリストは、以下の二つです。
- $wp->public_query_vars(外部からの入力)
- $wp->private_query_vars(内部からの入力)
ホワイトリストに登録されているキーだけが受け付けられます。
パラメーターを追加したい時(例えば、独自のキーを使いたい時)は、query_varsフィルター、$wp->add_query_var()を利用する事で追加できます。
※今回は追加するところまで経験しなかったので、別記事参考にしてください。
$wp->public_query_vars(外部からの入力)
$wp->public_query_varsにデフォルトで設定されている基本的なパラメーターの一覧はこちらにあります。
クエリ変数
メインクエリ
メインクエリとは、リクエストに対する検索のことです。
リクエストパラメーターが確定すると、次に出力対象のデータが検索されます。この検索のことをメインクエリと呼びます。
WP_Queryクラス
WP_Queryクラスは、主に投稿データの問い合わせに利用されるクラスです。
WP_Queryオブジェクトに検索条件を与えて検索すると、SQLの組み立て、DBの問い合わせを行って、結果を返してくれます。
その過程で検索条件を解析した結果をクエリフラグとして保持されます。クエリフラグには、どのタクソノミーのアーカイブ検索なのか?などの情報が判定され保存されます。
メインクエリでは、このクエリフラグを調べて、現在のリクエストがどのページへの問い合わせなのかを確認しています。
WP_Query
テンプレートの階層
データが取得された後は、テンプレートが読み込まれます。
メインクエリが、どのページなのか確認してくれますが、
実際にどのテンプレートを使うか?は、テンプレート選択のルールに従われます。
選択されるテンプレートは階層構造になっており、詳細な方から順番にテンプレートが存在するのか?の確認が行われます。
このテンプレート階層を利用する事で、異なるリクエストに対して違うデザインのテンプレートを利用できます。