日頃から大変お世話になっている「Wordpress」ですが、管理画面を使うことで簡単に使用できてしまうが故に中身の詳しい動作について考えることがあまりなく今まで使ってきました。
が、PHPのお勉強がてら一度中身を見てみようと思い立ちましたのでまとめておきたいと思います。
よく考えればPHPで動く代表的なソフトのひとつであるWordpressですからPHPを勉強するいい機会だと思いますので。
最初に動くファイルがルートディレクトリにある「index.php」
WEBブラウザを使用してWordpressで構築されたサイトにアクセスしたとき、最初に見られるファイルは「index.php」となります。
※WEBサーバの設定にもよるんでしょうが、通常は「DirectoryIndex」ディレクティブに「index.html index.shtml ~ index.php」などのように最初に見るべきファイルとして「index.php」が記述されているはずなので。
それではコメント部分を除外してindex.phpの中身を見てみることにします。
<?php define('WP_USE_THEMES', true); require( dirname(__FILE__) . '/wp-blog-header.php' );
コメントがいっぱい書かれているのですが、本文は2行のみですね。
define('WP_USE_THEMES', true);
最初の処理はdefine関数を用いて「WP_USE_THEMES」という定数を定義してますね。
値がtrueなのでこの定数はBoolean型。これがfalseのときはどうなるんでしょうか?そのうち出てくるのかな?と思いますので気に留めておくことにします。
require( dirname(__FILE__) . '/wp-blog-header.php' );
続いての処理はrequire文を使った「別のPHPファイルの読み込み」となっています。
その中で使われているdirname関数は引数で与えられるファイル名(パスを含む場合もあるみたい)の親ディレクトリのパスを返す処理を行います。
「__FILE__」はPHPで自動的に定義される定数で、現在参照中のファイルのパス(今の場合だとindex.phpのパス)を返すもの。
よってdirname(__FILE__)はindex.phpが格納されている=Wordpressのルートディレクトリを表します。
そして、require文は上でも書いたとおりPHPファイルの読み込みを行うもので役割的にはInclude文とほぼ同じということ。
※違うのはエラー発生時の処理で、Includeは警告を発しつつ処理を進めるのに対しrequireはFatal Errorを吐いて処理が停止します。
dir(__FILE__)で取得したパスと文字列「/wp-blog-header.php」をピリオドで繋いでいるので、このrequire文は「index.phpと同じディレクトリ(つまりルートディレクトリ)にあるwp-blog-header.phpを読み込む」ということになりますね。
まとめ
この度はWordpressの挙動を学ぶついでにPHPについて勉強しよう!ということで始めた内容でした。内容をまとめておくと
- WordPressのサイトにアクセスした場合最初に読み込まれるのはルートディレクトリのindex.php。
- index.php内の処理として次に行われるのは定数:WP_USE_THEMES=trueとして定義。
- 定数を定義した後は同一ディレクトリ内のwp-blog-header.phpを読み込む
という流れになります。
詳しくは今後も様々なファイルを見ていくことになる中で明らかになるんでしょうが、今回気になったのは
- require文とdefine関数で処理を行うこと
- 定数WP_USE_THEMESがfalseのときのこと
- dirname(__FILE__)の意味
- ファイルの末尾に「?>」がないこと
などです。なんとなく処理内容や理由はわかる気がするのですが、最終的にはきちんと理解できるようにしたいところですね。