WP_Queryとは
WordPressにはWP_Queryクラスというものがあり、データベースから投稿データを取得するためのクラスです。
つまりSQL書かなくても色々な事ができるワードプレスで用意されているクラスです。
WP_Queryクラスを正しく理解することがWordPressを使用するうえで重要なポイントです。
WP_Queryクラスで投稿データを取得し、テンプレートタグに引き渡します。
ただ WP_Queryクラスを直接インスタンス化するこはあまりありません、かわりにメインクエリによる検索、get_posts()などの関数を使う方法が一般的で便利です。
メインクエリとは
リクエストパラメータからデータを検索することをメインクエリといいます。
リクエスト例
- http://mysite○○.com/inedex.php?p=5099(IDが5509の記事のリクエスト)
- http://mysite○○.com/inedex.php?cat=8(カテゴリーのIDが8の記事のリクエスト)
テンプレートタグとは
メインループで取得したデータを表示したり、テンプレートパーツを呼び出したりすることができます。
インクルード系 | テンプレートパーツの呼び出し get_header()、get_sidebar() |
コンテンツ系 | データベースから取得したコンテンツを表示 the_title()、the_content() |
タグ出力系 | wp_head()、wp_footer |
条件分岐タグ系 | ページの種類を判別 is_home() |
WordPressで定義されたPHPの関数です。
クエリフラグの保持
WP_Query クラスの役割のひとつがクエリフラグの保持となります。
現在のクエリがどのページの種類か判別するためのものがクエリフラグです。
ページの種類
リクエストに対して出力されるページの種類は決まっています。
- アーカイブページ(カテゴリー別、日時別、カスタムタイプ投稿別…)
- 個別ページ(投稿ページ、固定ページ)
- サイトフロントページ
- ブログメインページ
- 検索結果ページ
- 404エラーページ
- コメントポップアップページ
メインループとサブループとは
サブループは記事のサイトバーによくある投稿一覧を表示させるとき使用します。
WP オブジェクトの main() メソッド
public function main($query_args = '') {
$this->init();
$this->parse_request($query_args);
リクエストの内容を解析し変数$wp->query_varsに保存
$this->send_headers();
$this->query_posts();
変数$wp->query_varsを使いメインクエリを実行
$this->handle_404();
$this->register_globals();
do_action_ref_array('wp',array(&this));
}
テンプレートの選択
リクエストパラメータからデータを取得したら、テンプレートの読み込みが行われます。
テンプレートの読み込みはテンプレート階層から、最初に見つかったファイルがロードされます。
テンプレートファイルは親テーマより子テーマに置かれているものが優先されます。
テンプレートタグ
WordPressにはテンプレートファイルでデータの出力に使う、テンプレートタグと呼ばれるPHPの関数が用意されいます。
the_ID()、post_class()、the_title() … 頭にtheがつくものはデータを出力するもの、getがつくものはデータを取得をするものが多いです。
条件分岐タグ
テンプレート内でそのページが何であるか確認、条件分岐することができる関数を条件分岐タグとよばれるPHPの関数が存在します。
is_archive()、is_singular()、is_category()…
インクルードタグ
インクルードタグは別のテンプレートをロードするための関数です。
get_header() get_footer() get_template_part()