Wordpressの実行の流れ
Wordpressの仕組みについて見ていきましょう。
実行の流れ
index
wp-blog-header
wp-load
wp-config
wp-settings
load.php
default-constants.php
plugin.php
各種関数・クラスの読み込み
グローバル変数の読み込み
テーマのfunctions.phpの読み込み
ログインユーザーの取得
wp()でurlからクエリの設定
template-loader
個別のテンプレート
1. Wordpressフォルダ直下のindex.phpが読み込まれる。
Wordpressに対するアクセスでは、どのurlでアクセスしても、 まず始めにWordpressフォルダ直下のindex.phpが読み込まれます。このファイルではまずwp-blog-header.phpが呼び出されます。
2. wp-blog-header.php
wp-load.phpというファイルが読み込まれ、定数や関数が定義されます
wp関数が実行され、クエリーが設定されます
template-loader.phpが読み込まれます
wp-load.php
定数ファイル: wp-config.phpを読み込みます。
mysqlの設定などはwp-config.phpで行われており、その他デバッグモードのon/offなども行われます。
wp-config.phpからwp-settings.phpが読み込まれます。
wp-settings.php
関数・定数のインクルードが行われます。
1. load.phpのインクルード
各種のコアとなる関数が読み込まれます。
2. default-constants.php
各種定数が読み込むための関数 wp_initial_constants()が定義されます。。
// 例:WP\_DEBUGという定数がまだ定義されていなければ、デフォルト値(false)で定義する。
if ( !defined('WP\_DEBUG') ){
define( 'WP\_DEBUG', false );
}
3. plugin.php
アクションフック、フィルターフックの仕組みに関する関数を定義します。
4. 各種設定関連
versions.phpのインクルード
wp_initial_constants() で定数を定義
wp-configで設定済みの定数があれば、そちらが優先されます。defined関数に注目しましょう。
- wp_check_php_mysql_versions
5. 各種関数・クラスの読み込み
各種関数やクラスのファイルを読み込んでいきます。このタイミングでwp-includesフォルダ内のほとんどのファイルが読み込まれます。
6. 各種グローバル変数の設定
wp_the_query
wp_query
wp_rewrite
wp
wp_widget_factory
wp_roles
7. テーマで設定された関数の読み込み
テーマ内のfunctions.phpが読み込まれます。
読み込み前に setup_themeアクション
読み込み後に after_setup_themeアクションが実行されます。
8. initメソッドの実行
現在ログインしているユーザー情報を取得しまあ
9. wp_loadedアクションの実行
各処理の実行が終わった段階で、wp_loadedアクションが実行されます。
wp関数の実行
function wp( $query\_vars = '' ) {
global $wp, $wp\_query, $wp\_the\_query;
$wp-\>main( $query\_vars );
if ( !isset($wp\_the\_query) )
$wp\_the\_query = $wp\_query;
}
$wpのmainメソッドを呼び出し、
$wp_the_query
$posts
$post
$request
などが設定される。
なお、
クエリの設定はWP_QUERYクラスのparse_queryメソッド
実際のクエリ実行はWP_DBクラスの_do_query関数で行われている。
template-loader.phpの読み込み
1. template_redirectアクションの発行
2. 処理の振り分け
HTTPのHEADメソッドならば何もしない
ロボットによるアクセスの場合の処理
RSSフィードを要求された場合の処理
トラックバックを要求された場合の処理
どれでもなければ3以降へ。
3. 各種条件チェック
wordpressのテンプレート階層を順番にチェック。
どの条件にも当てはまらなければindex.phpへ。
$template = false;
if ( is\_embed() && $template = get\_embed\_template() ) :
elseif ( is\_404() && $template = get\_404\_template() ) :
elseif ( is\_search() && $template = get\_search\_template() ) :
elseif ( is\_front\_page() && $template = get\_front\_page\_template() ) :
elseif ( is\_home() && $template = get\_home\_template() ) :
elseif ( is\_post\_type\_archive() && $template = get\_post\_type\_archive\_template() ) :
elseif ( is\_tax() && $template = get\_taxonomy\_template() ) :
elseif ( is\_attachment() && $template = get\_attachment\_template() ) :
remove\_filter('the\_content', 'prepend\_attachment');
elseif ( is\_single() && $template = get\_single\_template() ) :
elseif ( is\_page() && $template = get\_page\_template() ) :
elseif ( is\_singular() && $template = get\_singular\_template() ) :
elseif ( is\_category() && $template = get\_category\_template() ) :
elseif ( is\_tag() && $template = get\_tag\_template() ) :
elseif ( is\_author() && $template = get\_author\_template() ) :
elseif ( is\_date() && $template = get\_date\_template() ) :
elseif ( is\_archive() && $template = get\_archive\_template() ) :
else :
$template = get\_index\_template();
endif;
意外とシンプルな作り。
まとめ
以上で
1. 定数、関数の読み込み
2. 各種処理
3. グローバル変数をセット
3. DBからのデータ取得
4. HTML部分(テーマ)の読み込み
の処理が完了します。
簡単に言うと、
「テーマを読み込む前に、各種関数の読み込みとDBからの情報取得が終わっており、一部のデータがグローバル変数にセットされている」
と言うことになります。
そしてテーマでビュー(HTML部分の見せ方)を編集したり、 functions.php及びプラグインを利用して、各箇所のアクションフック・フィルターフックに処理を追加することができるようになっています。