WordPress: ページが表示されるまでに発火する主要なフック


あるページが表示されるまでに呼ばれる関数と発火するフックのうち主要なものを順に並べてみました。フロントページを例にしていますが、フロントページ固有の部分は get_front_page_template() のみ。他はどのページでも同じです。

/index.php
+-/wp-blog-header.php
  +-/wp-load.php
  | +-/wp-config.php
  |   +-/wp-settings.php
  |     +-/wp-includes/script-loader.php
  |     +-'plugin_loaded'
  |     +-'plugins_loaded'
  |     +-'init'
  +-wp()
  | +-WP::main() // /wp-includes/class-wp.php
  |   +-WP::parse_request()
  |   | +-'do_parse_request'
  |   | +-(rewrite_rules 読み込み)
  |   | +-'query_vars'
  |   | +-'request'
  |   | +-'parse_request'
  |   +-WP::send_headers() // header() 発行
  |   +-WP::query_posts()
  |   | +-WP_Query::query()
  |   |   +-WP_Query::get_posts()
  |   |     +-'pre_get_posts'
  |   +-'wp'
  +-/wp-includes/template-loader.php
    +-'template_redirect'
    +-get_front_page_template() // /wp-includes/template.php
    | +-get_query_template() // /wp-includes/template.php
    |   +-'{$type}_template_hierachy'
    |   +-locate_template()
    |   | +-load_template()
    |   |   +-'wp_before_load_template'
    |   |   +-'wp_after_load_template'
    |   +-locate_block_template() // /wp-includes/block-template.php
    |   | +-resolve_block_template()
    |   +-(グローバル変数 $_wp_current_template_content, $_wp_current_template_id のセット )
    |   +-'{$type}_template'
    +-'template_include'
    +-(include によるテンプレートファイル読み込み)
       +-/wp-includes/template-canvas.php
        +-get_the_block_template_html()
          +-do_shortcode()
          +-do_blocks()
            +-parse_blocks()
            +-render_block()
              +-'pre_render_block'
              +-'render_block_data'
              +-'render_block_context'
              +-WP_Block::render()
                +-'render_block'
                +-'render_block_{$this->name}'
        +-(<html><head> 書き出し)
        +-wp_head()
        | +-'wp_head'
        +-(<body> 書き出し)
        +-wp_body_open()
        | +-'wp_body_open'
        +-(get_the_block_template_html() の戻り値書き出し)
        +-wp_footer()
          +-'wp_footer'
  • 初期設定
    • init‘: プラグインの読み込みなど主要な設定が終了後に発火する。サイトの設定に関わる以下のような関数はこのフックを使う。
      • add_rewrite_rule(), add_rewrite_tag(), add_post_type_support()
    • query_vars‘: URLパラメーターを追加する。
    • request‘: クエリー変数がパースされた後に発火する。
    • parse_request‘: タイミングは ‘request’ フックと同じ。こちらはアクションフックであり、WPオブジェクトが参照渡しされる。
    • pre_get_posts‘: クエリー発行直前。クエリーはあるページを書き出すために何回も呼ばれるが、一番最初の ‘pre_get_posts’(メインクエリー) は ‘wp’ よりも先に発火する。
  • メインクエリー発行
    • wp‘: メインクエリーの結果取得後。一度しか発火しない。このフック以降では is_front_page() のような条件分岐タグが使える。
  • テンプレート呼び出し
    • {$type}_template_hierarchy‘: 読み込むテンプレートが決まってから発火する。ページの種類によって異なる処理をする場合、’wp’ のコールバック関数内で条件分岐タグを使うことが多いが、このフックを使うとその必要がない。たとえば404ページに手を加えるなら、 ‘wp’のコールバック関数の中で is_404() をするのではなく、ただ ‘404_template_hierarchy’ にコールバック関数を登録すればよい。
  • 表示データ生成
    • pre_render_block‘: render_block() が仕事を始める前に発火する。ダイナミックブロックをキャッシュしたデータがある場合にはこのフックのコールバックでキャッシュデータを返す。
    • render_block‘: ブロックに表示するHTMLが生成された後に発火する。
    • render_block_{$this->name}‘: 同上。 ‘render_block_core/paragraph’ のようにブロック種別ごとにコールバックを設定できる。
  • HTML書き出し
    • wp_head‘: テンプレートファイルの wp_head() が置かれた位置で発火する。このフックが発火する時点ではすでに、コンテンツは get_the_block_template_html() によって生成されていることに注意。/wp-includes/default-filters.php にはこのフックに大量のフックが登録されており、’wp_enqueue_scripts’ もその一つ。

管理者

/wp-admin(/index.php)
+-/admin.php
  +-/wp-load.php
  | (以下通常のロードプロセス)
  +-wp-admin/includes/admin.php
  +-'admin_init'