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

results matching ""

    No results matching ""