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()