WordPressの処理の流れ

だいたいこんな感じ。

□ index.php
ユーザがアクセスするファイル
  • wp-blog-header.php を読み込む↓

    □ wp-blog-header.php
    WP環境とテンプレートをロードする為のファイル
    • wp_load.php を読み込む↓

      □ wp_load.php
      Bootstrap用file
      • wp_config.php を読み込む↓

        □ wp_config.php
        ブログ毎のユニークな設定ファイル
        • MySQL の設定
        • Unique Key と Salt の設定
        • 言語設定(WP_LANG)
        • デバッグモード設定( WP_DEBUG)
        • wp-settings.php を読み込む↓

          □ wp-settings.php
          WordPressで必要な定数/グローバル変数/関数/クラスの設定を行う

          WordPressのコアの初期化】

          ▼コア部分で利用する定数/変数/関数の初期化

          • 初期化に必要なファイルの読み込み
          • 定数の初期化(wp_initial_constants())

          ▼事前処理

          • PHPMySQLのバージョンをチェック(wp_check_php_mysql_versions())
          • マジッククオートをOFFに
          • タイムゾーンUTCに設定
          • register globalsをOFFに
          • $_SERVER 変数のサーバ環境によって発生する差異を修正(wp_fix_server_vars())
            • IISとか、GGIモードで動かした場合とか
          • ファビコンとしてリクエストされた場合の処理(wp_fabicon_request())
          • メンテナンスモードかチェック(wp_maintenance())
          • タイマーをセット(timer_start())
          • デバッグモードかチェック(wp_debug_mode())
          • キャッシュの処理(キャッシュが有効の場合は advanced-cashe.phpを読み込み)
          • WP_LANG_DIRの設定(wp_set_lang_dir())
          • コア部分で必要なファイルを読み込み
            • compat.phpPHPのバージョンによって実装されていない関数を定義するためのファイル)
            • function.phpWordPress のメインAPI関数群)
            • class-wp.phpWordPressの環境設定用クラスである、WPクラスの定義ファイル)
            • class-wp-error.php(エラー処理を行う WP_Errorクラス定義ファイル)
            • plugin.php(フィルター/アクション/フック等のプラグインAPI関数群)

          ▼DB関連の初期化

          • wpdbクラスを読み込む(require_wp_db())
            • データベースの接続及び処理を担当する wpdb クラスを読み込む
            • wpdbクラス内部dでは、MySQL 関数を利用している模様
          • データベースのプレフィックスと、フィールドの型を設定(wp_set_wpdb_vars())
          • オブジェクトキャッシュ処理(wp_start_object_cache())(デフォルトではOFF)

          ▼コアの初期化残処理

          • フィルター/アクション/フックおよび多言語化対応の初期化
            • default-filters.php(デフォルトのフィルター/アクション/フックを初期化)
            • pomo/mo.php(多言語処理用クラス MOクラス定義ファイル)
          • マルチサイトの初期化(デフォルトではOFF)
          • SHOTINIT定数がtrueであれば以上で初期化終了 [デフォルトはfalse]

          以上で最低限必要な初期化処理完了


          WordPressの初期化】

          ▼多言語対応/インストール/関数等の初期化


          ▼マルチサイトとプラグインの初期化

          • マルチサイトで必要なファイルの読み込み
          • プラグインディレクトリ定数の設定(wp_plugin_directory_constants())
          • ”muplugins_loaded”アクションを実行(do_action( 'muplugins_loaded' ))

          プラグインの読み込み

          • クッキーの設定(wp_cookie_constants())
          • SSLの設定(wp_ssl_constants())
          • 共用グローバル変数の定義(vars.php
          • タクソノミーとポストタイプの初期化(create_initial_taxonomies(); create_initial_post_types();)
          • テーマディレクトリの登録
          • アクティブなプラグインを読み込み
          • pluggable な関数を読み込み(pluggable.php, pluggable-deprecated.php
          • 内部エンコーディング設定(wp_set_internal_encoding())
          • キャッシュが有効であればキャッシュの事後読み込み(wp_cache_postload())
          • ”plugins_loaded”アクション実行(do_action( 'plugins_loaded' ))

          サニタイズ処理

          • wp_functionality_constants()
          • マジッククオートと$_REQUESTの設定(wp_magic_quotes())
          • ”sanitize_comment_cookies”アクション実行(do_action( 'sanitize_comment_cookies' ))

          ▼WP_Query / WP_Rewrite / WP / WP_Widget の初期化

          • WordPress Query Object の作成($wp_the_query = new WP_Query())
          • WP_Rewriteオブジェクトの作成($wp_rewrite = new WP_Rewrite())
          • WordPressオブジェクトの作成($wp = new WP())
          • WidgetFactoryオブジェクトの作成($wp_widget_factory = new WP_Widget_Factory())

          ▼テーマの初期化

          • ”setup_theme”アクション実行(do_action( 'setup_themes' ))
          • テンプレート用定数の設定(wp_templating_constants())
          • load_default_textdomain()
          • Find the blog locale
          • テーマ用関数の読み込み(STYLESHEETPATH . '/functions.php', TEMPLATEPATH . '/function.php')
          • ”after_setup_theme”アクション実行(do_action( 'after_setup_theme' ))
          • Load any template functions the theme supports

          ▼WPの初期化

          • register_shutdown_function( 'shutdown_action_hook' );
          • 現在アクセスしているユーザー用にWPをセットアップ($wp->init())
          • ”init”アクションを実行(do_action( 'init' ))
          • check site status (is_multisit())
          • ”wp_loaded”アクションを実行(do_action( 'wp_loaded' ))

      • wp-config.phpがない場合は、最低限の環境を読み込み、wp-config.phpを作成するようにメッセージを表示する。
    • wp() 関数を実行(クエリーが処理される)
    • template-loader.php を読み込む↓

      □ wp-inclueds/template-loader.php
      URLに応じたテンプレートを表示する
      • robot / feed / trackback の場合は各々の処理して終了
      • 各種条件分岐でテンプレートを取得
      • 取得したテンプレートにフィルターを適用
      • テンプレートをinclude() して表示