WordPressの高度なカスタマイズを行う上で、WordPressがどのように動作しているのかを知っておくことは大切です。
※この記事は、わかりやすさを重視して誤解を恐れず大雑把に説明していますが、正確さの面からも随時改定します。
htaccessとwp-blog-header.php
まず、wordpress傘下のURLにアクセスすると、そのURLに一致する実態ファイルが存在しなければ、htaccessによって全てindex.phpにリダイレクトされます。
逆に言うと、sampleという投稿を作り、パーマリンクが http://example.com/sample/であったとしても、WordPressと同じ階層に /sample フォルダがあり、そこにindex.htmlなどがあれば、そちらが優先されるということです。
ともかく、大事なのはまずもって、どんなURLであろうが、常にindex.phpにアクセスしているということです。
WordPressのindex.phpは非常にシンプルで、(デフォルトでは)同じ階層にある、wp-blog-header.php を読み込んでいるだけです。
このファイルが読み込まれると、WordPressの種々の自動処理が行われます。
つまり、このファイルさえ読み込めば、WordPressのテーマ外あるいはディレクトリ外であってもWordPressの機能が使えるわけですが、この話はまた別の機会に。
wp-blog-header.phpによって行われる自動処理
ここからがWordPressそのものが行う処理です。
1. URLの解析
まず、WordPress傘下のURLにアクセスされると、WordPressはURLの解析を行います。
例えば、 http://example.com/news/page/2 というURLであれば、
・投稿タイプ news (存在すれば)の一覧で
・ページネーションの2ページ目
というように。
2. 検索条件の組み立てとDB検索
URLの解析が終わると、その条件をもとに、検索条件のリストを作ります。
上記の例だと、
・投稿タイプ news を
・1ページあたり10件として(デフォルト)
・2ページ目から
という検索条件が作られます。
その後、これを元に実際にデータベースに投げられるSQL文を作ります。
そして、検索を実行し、データを取得します。
3. テンプレートの決定
2で作られた検索条件と、取得したデータによって、読み込むべきテンプレートファイルを判断します。
上記の例であれば、データが1件以上あれば、
archive-news.php
archive.php
index.php
の優先順位で決定され、
データがなければ、
404.php
index.php
の順番で決定されます。
決定されたら、その優先順位でファイルが存在するかどうかのチェックを行い、存在すれば読み込みます。
ざっくり書きましたが、細かくいえば数十の手続きが、決められた順番で、自動的に行われています。
テンプレートカスタマイズの限界とフィルターフック、アクションフック
大事なことは、テンプレートが読み込まれた時には、これらの手続きは既に終わっている、ということです。
検索条件の変更や、テンプレートの分岐をテンプレートファイルで行おうとしても、それは無駄な二重処理であって負荷の原因になったり、既に行われている自動処理と矛盾して不具合の原因になったりします。
そこで、WordPressでは、より合理的なカスタマイズを実現できるよう、フィルターフック、アクションフックという仕組みが提供されています。
WordPressの基本動作を理解した上で、フィルターフック、アクションフックを使いこなすことが、WordPressのカスタマイズをする上では必須と言えるでしょう。