WordPressはどうやって動いているのか?①

NO IMAGE

私はよくWordPressを使ってサイトを作りますが、正直どういう仕組みで動いているのかはよくわかっていません。

せっかくなので、ソースコードを追って行ってどのようにページを表示をしているのかを調べてみようと思います。

index.php

まず最初に呼び出されるのは、WPが設置してあるディレクトリにあるindex.phpです。
ここでは、同ディレクトリのwp-blog-header.phpを呼び出します。

wp-blog-header.php

ここでは、以下の3つの処理を行います。

  • wp-load.phpの呼び出し
  • wp()の実行
  • template-loader.phpの呼び出し

wp-load.php

まずABSPATHという変数を定義して、それにWPをインストールしたルートディレクトリのパスを代入します。
次にwp-config.phpがルートディレクトリに存在するかどうかをチェックして、wp-config.phpがあればそれを読み込みます。
なかった場合はそのファイルを探したりしてくれるのですが、今回はルートにある前提で読み進めていきます。

wp-config.php

WPをインストールするときに最初に触ることが多いこのファイルでは、MySQL、秘密鍵、DBのテーブル接頭辞の設定、そしてABSPATHをもう一度確認します。
なぜもう一度ABSPATHを確認するのかは謎ですが、これらの処理が終了したら最後にwp-settings.phpを呼び出します。

wp-settings.php

このファイルでは、最初にWPINCという定数を定義します。
WPINCはWordPressで使う関数やクラスを定義しているファイル群を格納しているフォルダであるwp-includesを指します。
そして、定義後にwp-includesフォルダからいくつかのファイルを呼び出します。

呼び出されるファイル

  • load.php
  • class-wp-paused-extensions-storage.php
  • class-wp-fatal-error-handler.php
  • class-wp-recovery-mode-cookie-service.php
  • class-wp-recovery-mode-key-service.php
  • class-wp-recovery-mode-link-service.php
  • class-wp-recovery-mode-email-service.php
  • class-wp-recovery-mode.php
  • error-protection.php
  • default-constants.php
  • plugin.php

全て見ていくときりがないので、以下の3ファイルを見ていこうと思います。

  • load.php
  • default-constants.php
  • plugin.php

load.php

ここではWordPressのセットアップに必要ないくつかの関数が宣言されています。
その中にはメンテナンスモードやデバッグモードに関するものや$wpdbにDBの情報を格納する関数などもあります。

さらに調べてみると現在ではほとんど機能していない関数もあるようです。
例えばwp_unregister_GLOBALS()はregister_globalsというPHPの黒歴史とも呼べる機能を使用しているかどうか判定して、使用していればいろいろ頑張る関数です。
しかし、register_globalsはだいぶ前にPHPから消えてしまったので、今日では相当古いPHPを使用しない限り必要ありません。

default-constants.php

ここでは、定数やグローバル変数を定義します。
ここで定義したものは基本的にwp-config.phpで上書きができます。

plugin.php

ここでは、add_filterやapply_filtersなどWordPressで多用されるフック系の関数が定義されます。

いったんまとめ

今回はここまでで次回はwp-settings.phpの処理の続きから書いていこうと思います。

参考

https://humanshell.net/2011/08/wordpress-initialization/
http://memories.zal.jp/WP/blog/20090608_1564.html