はてブpocketWordPressエンジニア向け入門その4です。『WordPressエンジニア向け入門その3、リクエスト解析とページ種類の決定』は、WordPressのリクエストの仕組みについて説明しました。今回はその続きで、リクエスト解析結果に基づいたデータ取得処理についてです。この連載の中でも特に重要な部分です。メインクエリを理解することでWordPressの思想が見えてきます。残念ながら世の中のWordPressの情報で、メインクエリを理解せずに誤ったデータ取得について記載されているものもまだまだ多いです。確実に理解することで開発の効率化・品質の向上が期待できます。まとめメインクエリとはメインクエリとは読んで字のごとく、「メイン」の「クエリ」です。メインとは、ページで主となるもの(データ)のことです。クエリとは、データの検索(取得)のことです。ページの主となるデータの検索(取得)処理となります。ページの主となるデータとはなんでしょうか。ページ種類ごとに以下の分類になります。アーカイブに属する投稿データ(通常、複数件)ページ種類に応じて適切なデータを取得する処理のことをメインクエリといいます。メインクエリは自動で処理されることもポイントです。サブクエリとはメインクエリがあればサブクエリもあります。ページのメインデータではデータを取得・表示する際はサブクエリを実行します。サブクエリは例えば、サイドバーに新着記事5件表示や記事の下部に関連記事を表示する際に利用します。詳しい処理方法等はまた別の機会に。データ取得処理それではメインクエリによるデータ取得処理について説明します。データの取得条件はリクエストの種類(URL)によって変わります。個別投稿記事ページヘのリクエストなのか、アーカイブページへのリクエストなのか等で取得すべきデータが変わるからです。データ取得処理はWP_Queryというクラスに定義されており、get_posts関数で処理されます。データ取得結果等は$wp_queryというグローバル変数に格納されます。実際にリクエストからデータを取得する例を見ていきましょう。index.php?category_name=fooというリクエストパラメータと解釈されます。『WordPressエンジニア向け入門その3、リクエスト解析とページ種類の決定』をご覧ください)category=fooというパラメータを元にfooカテゴリに属する投稿記事データを取得します。index.php?name=bar&category_name=fooというリクエストパラメータと解釈されます。name=barのnameパラメータから個別投稿記事へのリクエストと判断し、投稿記事barを取得します。クエリフラグの設定クエリフラグとは、is_singleやis_categoryといったページ種類の判定用フラグのことです。グローバル変数の$wp_queryのプロパティとして設定されます。メインクエリの処理(get_posts関数)にて、データを取得する前にクエリフラグ設定処理が実行されます。カテゴリアーカイブへリクエストがあった場合、is_archiveやis_categoryがtrueと設定されます。メインクエリの変更方法メインクエリはリクエストの種類に応じて決定し、自動でデータを取得する処理であることがわかりました。データ取得処理を変更することはできるのでしょうか?はい、可能です。特定のカテゴリのときだけ表示件数を変えたい特定の投稿記事は非表示にしたいなど。ページの種類や条件によって、表示内容を制御したい場合、WordPressで用意されているフックを使えば実現できます。メインクエリ変更に関するフックよく使う関連フックは以下の2つです。requestpre_get_postsほとんどの場合、pre_get_postsを使用すれば事足りるはずです。簡単に説明すると、requestフィルターがリクエストの内容を変更するフックで、pre_get_postsはデータ取得の条件を変更するフックです。詳しい使い方等はまたの機会に。まとめもう一度おさらいすると、メインクエリとは、リクエストされたページの種類に応じて適切なデータを自動で取得する処理のことです。自動で取得する処理が実行されるので、それを生かしたサイトにしましょう。間違ってもメインクエリの存在を無視して、自分でページのメインデータを取得しなおすことのないように気をつけましょう。データ取得条件を変更したいときはフックを使うことがWordPressのお作法です。スポンサーリンクこの記事が気に入っていただけたらシェアお願いします。コメントをキャンセルメールアドレスが公開されることはありません。Web担当者として日々学んだことを書いていきます。