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及びプラグインを利用して、各箇所のアクションフック・フィルターフックに処理を追加することができるようになっています。