WordPressエンジニア向け入門その1、ページが表示されるまでの仕組み

WordPressのテーマカスタマイズ初心者向けに連載記事を書いていきます。対象読者は以下に当てはまる方です。
- WordPressを使ったことはある
- これからWordPressをカスタマイズしたい
- なんとなくカスタマイズしてきたけど正しいやり方を学びたい
- オリジナルテーマを作成したい
- PHPはわかるけどWordPressはよくわからない
エンジニア向けと謳っているので、HTMLやPHP自体をある程度理解している(さわったことがある)人が前提の連載記事となります。連載を読むことでWordPressのお作法に則った正しいカスタマイズ手段が伝わればと思います。
連載初回である当記事では、WordPressでページがリクエストされてから表示が完了するまでの処理の流れを紹介します。なお、理解しやすいように、詳細部分は省いている場合があります。ポイントを押さえていただければ嬉しいです。
目次
テーマカスタマイズのポイント
テーマのカスタマイズをする際、WordPressのどの処理をカスタマイズするかを理解し、正しい方法でカスタマイズすることがポイントです。正しくカスタマイズすることで、 不具合がなく、効率的な処理を実行することができます。そのためにまずはカスタマイズ前の処理の流れやWordPressの仕様を理解することが不可欠です。
それでは順に見ていきましょう。
ページが表示されるまでの処理概要
あるURLにリクエストされてからページが表示されるまで、内部的には以下の流れで処理が進み、ページが表示されます。
- 初期化処理
- リクエストされたURLを元に、表示するページ種類・データを特定
- データベースから特定されたページ種類に基づくデータを取得
- 特定されたページ種類に応じたテンプレートを選択
- 選択されたテンプレートを読み込み、ページを表示
それぞれの処理について、連載記事で掘り下げます。当記事では以下に概要を説明します。
初期化処理
ページが読み込まれる際、以下のように各種セットアップ処理が実行されます。カスタマイズ初心者は読み飛ばしてもらってもいい内容です。
- 定数の定義
- 各種classの読み込み、インスタンス化
- データベース接続
- プラグインの読み込み
- グローバル変数の定義
- 有効なテーマ読み込み
- 子テーマのfunctions.php読み込み(子テーマが実行されている場合)
- 親テーマのfunctions.php読み込み
押さえておくべきポイントとしては、
- 子テーマのfunctions.phpが先に読み込まれる
- プラグインの読み込みはテーマの読み込みの前に行われる
ことです。子テーマを作る、プラグインを作る際には意識すべきポイントです。詳細は別の機会に。
リクエストされたURLを元に、表示するページ種類・データを特定
WordPressではリクエストされたURL(例、http://example.com/?p=1)を元に、取得すべきデータを判定します。管理画面でパーマリンクを設定することで、ユーザーに表示されるURLをカスタマイズすることができます。
パーマリンクとはルートURL以降の部分を指します。http://example.com/?p=1の /?p=1のこと。このURLはWordPressのパーマリンク設定がデフォルトの場合の、投稿ID=1の投稿記事URLです。この例の場合、 投稿ID=1の投稿記事=特定されたデータです。
データベースから特定されたページ種類に基づくデータを取得
リクエストされたURLからページ種類(投稿ページ、カテゴリアーカイブ等)が判明したら、ページ種類に応じたデータ取得処理が自動で行われます。
データ取得処理はWP_Query関数で実行されます。リクエストされたURLに応じてWP_Query()で条件を設定し、データを取得するイメージです。
この処理のことをWordPressではメインクエリと呼びます。以下のように表示するページのメインコンテンツデータに変更がある場合はメインクエリをカスタマイズします。
- アーカイブページごとに表示件数を変える
- 特定のアーカイブページで特定の投稿を除外する
- アーカイブページで表示順入れ替えで並び替える
メインコンテンツデータとは、
- アーカイブページ → 記事一覧
- 投稿記事ページ → 投稿内容
等が該当します。
メインクエリとサブクエリ
メインクエリとは別にサブクエリと呼ばれるものもあります。かんたんに言うと、ページのサブコンテンツに該当するものを取得するためのクエリです。 例えば、
- サイドバーに新着記事・人気記事を表示する
- 投稿ページ下部に関連記事を表示する
場合などです。
自分がカスタマイズする内容がメインクエリなのかサブクエリなのかを意識する必要があります。どちらかによってカスタマイズ方法が異なります。
特定されたページ種類に応じたテンプレートを選択
リクエストから特定されたデータを取得できたら、対応するテンプレートファイルを決定します。
テンプレートファイルとは、投稿記事ページやアーカイブページなど、対応したページを表示するためのファイルです。多くの場合、HTMLやCSSなど該当ページの見た目を定義しているファイルです。
大抵のテーマには以下のようなデフォルトテンプレートがあります。
- single.php → 投稿記事ページ用
- category.php → カテゴリアーカイブページ用
- page.php → 固定ページ用
- header.php → サイト共通のヘッダーパーツ
- footer.php → サイト共通のフッターパーツ
- sidebar.php → サイト共通のサイドバーパーツ
これらを直接編集してもいいですし、例えば、特定のカテゴリアーカイブ用に別途テンプレートファイルを作成し、カスタマイズしてもいいです。
ここで理解する必要があるのは、どのようにテンプレートファイルが決定されるかです。言い換えると、 自分がカスタマイズしたテンプレートファイルをどうすれば読み込ませることができるのかが重要です。
選択されたテンプレートを読み込み、ページを表示
ここでようやくページが表示されます。ページを表示する際、ループと呼ばれる処理を実行し、投稿を順番に表示します。ページのメインコンテンツデータを取得する メインクエリの取得データを表示する処理を特にメインループと呼びます。
見た目はHTMLとCSSで記述し、それをWordPressの関数(PHP)を使って処理します。
ちなみに、投稿記事ページの場合、メインクエリのデータ件数は1件ですが、ループで処理します。これは不思議ですがWordPressの仕様なので割り切ってください。
まとめ
いかがでしたでしょうか。当記事ではまずはページ表示までの流れをざっくり理解していただけたらと思います。
処理の流れやそのときどきの処理仕様を理解することで、 処理の流れのなかでどの部分をカスタマイズすればいいのか考えるのが正しいカスタマイズの第一歩です。