WordPressにおいて、表示されているページが投稿ページかアーカイブページなどかを簡単に判別できる条件分岐タグは、いったいどのタイミングから有効になるのだろうか?

どのアクションフックから正常にページ種別を判定できるのか?

ということを調べてみました。

ちなみに、なぜそんなこと知りたいのかというと、何度も条件分岐タグを使わなくていいようにページ判定結果を定数化しておきたかったからです。

目次

検証方法

検証方法は簡単で、いくつかのアクションフック でvar_dump()で結果を確認するだけ。

前回の記事で、主要なアクションフック が実行される順番は分かったので、それを踏まえてどのフックから正常に条件分岐タグが使えるのかを調べました。

WordPressの主要なアクションフックが実行される順番を検証してみたWordPressの主要なアクションフックが実行される順番を検証してみた

今回検証したのは以下のアクションフック。(タイミングが早い順で並んでいます。)

  1. init
  2. wp_loaded
  3. parse_request
  4. send_headers
  5. parse_query
  6. pre_get_posts
  7. the_posts
  8. wp

これらのフックにて、以下のように条件分岐タグを出力させてみました。

var_dumpで条件分岐タグを出力

add_action( 'フック名', function() {
  var_dump( is_home() );
});

結果

  1. init
  2. wp_loaded
  3. parse_request
  4. send_headers

    (これより前では正常に判別できなかった)

    (ここから正常に判別できた)

  5. parse_query
  6. pre_get_posts
  7. the_posts
  8. wp

上記のような結果になりました。

条件分岐タグはparse_queryアクションフック以降で正常にページを判別できる!

ということがわかりました。

もちろん、これはページ種別を判別するための条件分岐タグの話です(is_home()やis_single()など)。
is_admin()などは別の話なので、ご注意ください。

条件分岐タグは定数化しておくと便利!

複数回使うようなページ分岐タグは、あらかじめ定数化しておくことでページの表示速度をほんの少し高速化できます。

こんな感じ

add_action( 'wp', function() {

    /* ページ種別 条件分岐タグ*/
    define( "IS_HOME", is_home() || is_front_page() );
    define( "IS_SINGLE", is_single() );
    define( "IS_PAGE", is_page() );
    define( "IS_ARCHIVE", is_archive() );
    define( "IS_PT_ARCHIVE", is_post_type_archive() );
    define( "IS_DATE", is_date() );
    define( "IS_AUTHOR", is_author() );

}, 1);

なぜ一番有効化の早いparse_queryアクションフックではなく、wpアクションフックで定数化しているかというと、wpアクションフックは管理画面では実行されないからです。

ここで定数化させている条件分岐タグはどれも管理画面では使わない(使えない)ので、無駄な処理を走らせないように考慮しています。

- Thank you for reading. -

コメント

コメントする