ここでは WordPress の中身を覗くで、WordPress で作られたサイトがブラウザで表示されるまでどのようなファイルが読み込まれて何が起こっているのかを調べてみようと思います。記事を読みながらファイルを確認したい方はWordPressの公式サイトから WordPress をダウンロードしてください。ダウンロードしたzipファイルを解凍すると wordpress
という名前のフォルダが出来ると思います。この中のファイルを見ていきます。
なおこの記事では WordPress 4.0 の中を覗きます。
以下ではコードの中に日本語で注釈を加えることで説明していくことにします。
はじめに: WordPress の構成要素
WordPress は大きく分けて4つの構成要素から成っています。
-
コアシステム
すべての基礎です。これが WordPress の本体であって、ここなくして WordPress は機能しません。例えば get_header 関数とかもこのコアシステムに定義されています。
-
データベース
記事の内容やらユーザー情報やらなんやらかんやらのデータを管理してます。WordPress では MySQL を使用しています。
-
テンプレート
これを元に各ページが動的に生成されます。テーマの作成というのはこのテンプレートを独自に作成することと同じです。
-
プラグイン
WordPress の機能を拡張してくれるものです。例えば SEO 対策を施しやすくしてくれるものや、ウェブページの読み込みを速くしてくれるもの、画像を圧縮してくれるものなどなど様々なプラグインが開発されています。
WordPress と Apache・PHP・MySQL の関係
コアシステムのコードを見ていく前に、WordPress と Apache・PHP・MySQL の関係についてちょっと書いておきます。
ブラウザ上でウェブサイトをみるとき、ブラウザとサーバとの間でなんやかんやのやりとりがあります。でもってこのサーバというのは中できっちり役割分担ができています。WordPress のようなウェブアプリケーションの場合は、Web サーバ、アプリケーションサーバ、データベースサーバというのが関与しています。そして Web サーバソフトウェアである Apache、アプリケーションサーバでプログラム実行をする PHP、データベースサーバでデータを管理するソフトウェアである MySQL の3つが WordPress の動作に必須となっています。これらが連動することでWordPress が機能するわけです。
WordPress でつくったウェブサイトにアクセスすると、おおまかには次のようなことが行われています。
- ブラウザに URL をうちこむと、サーバにリクエストが送られる。
- Web サーバ上の Apache がリクエストされたファイルを探す。
- php ファイルが指定された場合はアプリケーションサーバで PHP が動いてプログラムが実行される。
- そのプログラムがデータベースへアクセスを要求すると、データベースサーバ上の MySQL に渡ってデータの読み込みや保存が行われる。
- アプリケーションサーバでの処理が終了すると、HTML ファイルなどが作成されて Web サーバに返される。
- Web サーバからブラウザへリクエストの結果が返ってきて、ブラウザが HTML、CSS、JS ファイルなどを読み込んでウェブサイトが表示される。
これがほんの数秒もない間に実行されてブラウザ上にウェブサイトが表示されているわけです。
これを頭に入れた上で WordPress がどんなふうに実行されているのかを見ていきましょう。
wordpress/index.php
まず最初に読み込まれて実行されるのはindex.phpです。ブログのトップページであろうと個別の記事ページであろうとはたまたECサイトのフロントページであろうと、まず読み込まれるエントリーポイントはindex.phpです。index.phpではwp-blog-header.phpが実行されるだけです。各テーマディレクトリに入っているindex.phpとは別物です。これはWordPressのルートディレクトリに入っているindex.phpなので注意してください。
wordpress/wp-blog-header.php
index.phpの最後で実行されるwp-blog-header.phpを見ていきます。こいつの役割はwp-load.phpとwp-includes/template-loader.phpの読み込みです。
wordpress/wp-load.php
続いてwp-load.phpです。基本的な役割はwp-config.phpを読み込む、もしくはwp-config.phpが存在しない場合(WordPressをインストールした直後)にwp-config.phpを作成すること、そしてwp-includes/version.phpを実行することです。
wordpress/wp-settings.php
wp-load.phpで読み込まれたwp-config.phpの最後に実行されるのがwp-settings.phpです。wp-includes内の様々なファイルを読み込み、コアシステムで使用する定数や変数、関数、クラスを設定します。またプラグインの読み込みやテーマの初期化、さらにはWordPressの初期化も行います。
wordpress/wp-includes/template-loader.php
wordpress/wp-blog-header.phpの最後で読み込まれるwordpress/wp-includes/template-loader.phpです。ここでは表示させるページの種類に応じて、テーマフォルダからテンプレートファイルを読み込みます。
まとめ
ここまでをまとめるとだいたいこんな感じです。主要なファイルだけを抜き出して、読み込まれる順に書いてあります。
ファイル名 | ファイルの役割 |
---|---|
index.php | どんなページを表示するときでも最初に読み込まれ、wp-blog-header.php を読み込む。 |
wp-blog-header.php | wp-load.php と wp/includes/template-loader.php を読み込む。 |
wp-load.php | wp-config.php を読み込み(wp-config.php が存在しない場合は wp-config.phpを作成する)、wp-includes/version.php を読み込む。 |
wp-config.php | MySQL データベースや認証キーの設定などをした後、wp-settings.php を読み込む。 |
wp-settings.php | wp-includes 内の様々なファイルを読み込み、コアシステムで使用する定数や変数、関数、クラスを設定します。またプラグインの読み込みやテーマの初期化、さらには WordPress の初期化も行います。 |
wp-includes/query.php | 表示させるべきデータを取得するためにデータベースへアクセスします。WP_Query クラスや is_home などの条件分岐タグも定義しています。 |
wp-includes/rewrite.php | WP_Rewrite クラスを定義しています。 |
wp-includes/template-loader.php | 表示させるページの種類に応じて、テーマフォルダからテンプレートファイルを読み込む。 |
最後に
PHPがまったくわからなくても、コアファイルを読むとなんとなくPHPに慣れてきて分かるようになってくるものです。テーマフォルダ内のheader.phpやpage.phpだけじゃなくて時間があればコアファイルも見てみるとWordPressがどんな仕組みで動作しているのかに触れることができて面白いと思います。