前回に引き続きWordpressの挙動を見ていきます。
今回はメインのindex.phpから呼び出されるwp-blog-header.phpを見てみることにします。
wp-blog-header.phpについて
上でも書いたとおり、メインのindex.phpの次に読み込まれるPHPファイルで、コメントを読んでみると「Wordpressの環境とテンプレートを呼び出す」みたいなことが書かれています。
前回と同じくコメントを省いて本文のみに目を通すと
<?php if (!isset($wp_did_header)){ $wp_did_header = true; require_once( dirname(__FILE__) . '/wp-load.php' ); wp() require_once( ABSPATH . WPINC . '/template-loader.php' ); }
となっています。それでは順を追って見ていきますね。
if (!isset($wp_did_header)) {
if文を使って処理を分岐させています。なにぶん不慣れなものでひとつずつ考えないと理解できないのですが要するに「!isset($wp_did_header)」がtrueなら続きの処理が実行されるということですよね。
!は論理否定演算子なので、!isset(変数)=trueということはisset(変数)=falseという意味でしょう。
isset関数は「引数に用いられる変数に値がセットされていてnullでない」場合にtrueを返すということなので、今回の場合は$wp_did_headerに何もセットされていなかったりnullが格納されていたりすると最終的に!の働きでtrueになるということです。
trueの場合次の処理が行われます。
$wp_did_header = true;
先ほどのif文の評価がtrueだった場合、変数$wp_did_headerにtrueが格納されます。
require_once( dirname(__FILE__) . '/wp-load.php' );
前回使用されていたrequire文と似たような「require_once」が使用されています。
読み込み済みの場合には処理を行わない(=once:一度きり)というのが特徴のようですが、その意図は関数の再定義や変数の再代入を防ぐことなんですって。
ちなみにdirname(__FILE__)は前回学んだ内容で読み込み中のファイルのパスを使う手法です。
wp();とreauire_once( ABSPATH . WPINC . '/tempate-loader.php' );
ここで嵌りました。
「wp()」と「ABSPATH」と「WPINC」がよくわからなかったのです。調べると
- wp()は何らかの関数であろうと予測
- ABSPATHはWordpressのインストールディレクトリを表す
- WPINCはインストールディレクトリ下にある「wp-includes」ディレクトリを表す
ということだったんですが、いったいどこでそんなことが定義されるんだ!?と。
※結論から言いますと、次回以降に取り上げようと思っていたwp-load.phpとwp-functions.phpで定義されているんですって。処理の順番から言えば納得なんですが、初心者にとってはこんなことでも躓きの原因になるんです。
ということでここではwp関数を呼び出した後wp-includes/template-loader.phpを読み込むという処理になります。
まとめ
いきなり躓くことになってしまいましたが、今回の処理の流れをまとめます。
- if文の条件式で!演算子とisset関数をつかい、変数が空のときの処理を実行
- wp-load.phpを読み込むことで各種定数を定義したりその他設定ファイルを読み込む
- template-loader.phpを見にいくことで設定されたテンプレートを読み込む
という順番に処理されていくようです。
大筋を先に把握して細部を詰めていく方がわかりやすいようにも思いますが、定数の意味などは都度調べないとどこのファイルを読みにいっているか判らないので先に進めなくて困ってしまいますよね。
次はその辺りも踏まえてどちらを先に取り上げるか考えてみることにします。