ここでは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でつくったウェブサイトにアクセスすると、おおまかには次のようなことが行われています。

  1. ブラウザにURLをうちこむと、サーバにリクエストが送られる。
  2. Webサーバ上のApacheがリクエストされたファイルを探す。
  3. phpファイルが指定された場合はアプリケーションサーバでPHPが動いてプログラムが実行される。
  4. そのプログラムがデータベースへアクセスを要求すると、データベースサーバ上のMySQLに渡ってデータの読み込みや保存が行われる。
  5. アプリケーションサーバでの処理が終了すると、HTMLファイルなどが作成されてWebサーバに返される。
  6. 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です。ここでは表示させるページの種類に応じて、テーマフォルダからテンプレートファイルを読み込みます。

まとめ

ここまでをまとめるとだいたいこんな感じです。主要なファイルだけを抜き出して、読み込まれる順に書いてあります。
/wordpressディレクトリ /wordpress/wp-includes/ディレクトリ ファイルの役割
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の初期化も行います。
query.php 表示させるべきデータを取得するためにデータベースへアクセスします。WP_Queryクラスやis_home()などの条件分岐タグも定義しています。
rewrite.php WP_Rewriteクラスを定義しています。
template-loader.php 表示させるページの種類に応じて、テーマフォルダからテンプレートファイルを読み込む。

最後に

PHPがまったくわからなくても、コアファイルを読むとなんとなくPHPに慣れてきて分かるようになってくるものです。テーマフォルダ内のheader.phpやpage.phpだけじゃなくて時間があればコアファイルも見てみるとWordPressがどんな仕組みで動作しているのかに触れることができて面白いと思います。

参考ページ