WordPressの仕組み

functions.phpを読む前に、WordPressがどのように動いているのか、どのアクションがどの順番で実行されるのかをざっくりと理解しなければならないの、まずはまとめて頭にいれてこうと思います。

一番良いのは、ちゃんとソースコードを読むことなんですが、まずは、以下のサイトを参考にして流れを追ってみます。

https://www.wpbeginner.com/wp-tutorials/how-wordpress-actually-works-behind-the-scenes-infographic/

1.wp-config.phpの読み込み

wp-config.phpは、サイトのグローバル変数やデータベースの情報をセットするファイルで、まずはこのファイルが読み込まれる。

2.デフォルトの定数を設定

wp-config.phpの読み込みが終わったら、wp-config.php内に書かれているデフォルトの定数を設定する。

3.advanced-cache.phpの読み込み

advanced-cache.php がサイトに存在する場合は読み込む。名前の通り高度なキャッシュの設定を行うためのファイルで、高速化のプラグインでよく使われる。このファイルを使っているかどうかは、プラグイン管理画面のDrop-insで確認できる。

4.wp-content/db.phpの読み込み

wp-content/db.php がある場合は読み込む。WordPressでは、 wp-content/db.phpに、ユーザーが自前のデータベース抽象化レイヤーを置いておいて、利用することができる。データベースのパフォーマンスを改善するようなプラグインで使われる。

5.MySQLに接続しDatabaseを選択

MySQLサーバーに接続しデータベースをセレクトする。もしデータベースに接続できない場合は、”Error establishing database connection”が出てWordPressは中断する。

6.object-cache.phpまたはwp-includes/cache.phpの読み込み

object-cache.phpがあれば読み込む。 無い場合は、wp-includes/cache.phpを読み込む。

7.wp-content/sunrise.phpの読み込み

マルチサイト化(一つのWordPresシステムで複数のサイトを運営)されている場合は、 sunrise.phpを読み込む。

8. ローカリゼーションのためのライブラリの読み込み

l10n.phpを読み込む。 このファイルは、ローカリゼーションの設定、翻訳、ロケールの設定等を行う。localizationの先頭lと最後のnの間に18文字あることに由来してl10nと書いている。

9.Multisite Pluginの読み込み

マルチサイト化されている場合は、マルチサイトプラグインを読み込む。

10. ‘muplugins_loaded’アクション

‘muplugins_loaded’アクションが実行される。

11. Pluginの読み込み

データベースでアクティブになっているプラグインを読み込む。

12.pluggable.phpの読み込み

pluggable.phpを読み込む。このファイルには、プラグインで再定義可能な関数が書いてある。WordPressはこのファイルの中の関数がプラグインで定義されているか確認をして、定義されていない場合はこのファイルの関数を読み込む。

13.‘plugins_loaded’アクション

‘plugins_loaded’アクションを実行する。このアクションに、すべてのプラグインが読み込まれた後で実行したい関数をフックする。

14.リライトルールの読み込み

リライトルール(アクセスされたURLをパラメーターに変換するルール)を読み込む。リライトルールについては、以下がとてもわかりやすいです。

http://www.warna.info/wp-content/uploads/2012/10/wordbench-chiba20121014.pdf

15.wp_query、wp_rewrite、 wpをインスタンス化して読み込み

$wp_query

WP_Query classのグローバルインスタンス。どのコンテントがリクエストされているかを、WordPressのクエリフォーマットで WotdPressに伝える。

$wp_rewrite

WP_Rewrite classのグローバルインスタンス。リクエストされたコンテントを表示するのにどのURLを使えばよいのか、リライトルールに従ってWordPressに伝える。

$wp:

WP classのグローバルインスタンス。リクエストをパースして実行する関数を含んでいる。

16.‘setup_theme’アクション

テーマが読み込まれる前に実行される‘setup_theme’アクションを実行する。

17.子テーマのfunctions.phpの読み込み

子テーマを使っている場合は子テーマのfunctions.phpを読み込む。

18.親テーマのfunctions.phpの読み込み

子テーマを使っている場合は、親テーマのfunctions.phpを読み込む。特に使っていない場合は、テーマのfunctions.phpを読み込む。

19.‘after_setup_theme’アクション

WordPressがテーマの読み込みが終わった後で実行されるアクション。テーマにとっては初めて利用可能なアクション。

20.カレントユーザーのオブジェクトのセットアップ

カレントユーザーのオブジェクトを読み込むことで、WordPressが、ユーザーに基づいたリクエストの処理を行るようになる。

21.‘init’アクション

ここまでで、WordPressは必要不可欠な情報の読み込みが終わったので、‘init’アクションを実行する。このアクションに、今まで読み込んだ情報を利用して処理を行う関数をフックする。

22.‘widget_init’アクション

‘widget_init’アクションを実行する。

23.wp()の実行

wp-includes/functions.phpのwp()関数を実行する。この関数はWordPressに
wp、wp_query、wp_the_queryといったグローバル変数をWordPressクエリを設定して、wpクラスのメイン$wp->mainを実行する。

24.リクエストのパース

ここまでの情報を用いて、ユーザーのリクエストをパースする。

25.メインクエリの実行

マッチするコンテントがない場合は、WordPressはis_404変数を設定する。

それ以外の場合は、クエリ変数の読み込みを続ける。

WP_Query->get_posts()を実行する。

‘pre_get_posts’ アクションを行う。

データベースからフェッチしたpostsに、posts_resultsフィルターやthe_posts filtersフィルターを適用する。

the postsをリターンして、メインクエリが終わる。

26.‘template_redirect’アクション

‘template_redirect’アクションを行う。WordPressがどのテンプレートを読み込むか決定する前に実行される。

27.Feed Templateの読み込み

RSSフィードがリクエストされている場合は、feed templateを読み込む。

28.Templateの読み込み

テンプレート階層に従ってテンプレートファイルを読み込む。

29.‘shutdown’アクション

‘shutdown’アクションを行いphpの処理を終了する。

以下のフローチャートもわかりやすいです。

ちゃんとソースを読みながら参照するには、こちらのほうが良いと思います。

https://wpmayor.com/how-wordpress-is-loaded-step-by-step/