【WordPress】便利なアクションフック「template_redirect」

【WordPress】便利なアクションフック「template_redirect」

WordPressをカスタマイズする上で欠かせないのがアクションフックです。
今回はその中でもかなり使用頻度の高い「template_redirect」フックについてのメモ。

template_redirectの概要

WordPressをある程度カスタマイズできるようになってくると、ページが表示される最初のタイミングで何かを実行したい!という場面が出てきます。
そんな時に使えるアクションフックがtemplate_redirectです。

WordPressのアクションフックは以下のページに掲載されています。

https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7#.E4.B8.80.E8.88.AC.E7.9A.84.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88.E4.B8.AD.E3.81.AB.E5.AE.9F.E8.A1.8C.E3.81.95.E3.82.8C.E3.82.8B.E3.82.A2.E3.82.AF.E3.82.B7.E3.83.A7.E3.83.B3

アクションフックは実行する順番があり、上記のCodexに載っているリストも実行順になっているとのことですが、よく読むと「大体の目安」となっているので、ちゃんと調べてみた方のブログを拝見して確認しました。

https://wemo.tech/2062

こちらの記事の実行結果を見るとinitwpよりも後で、wp_headよりも早いタイミングで実行されることがわかります。
投稿データを取得した後に実行するため、通常テンプレート内で使うようなis_pageなどの条件分岐タグが使えます。initでは条件分岐タグは使えないですし、wp_headや直接テンプレートファイルに処理を書くとすでにヘッダー情報が送信されていてリダイレクトなど実行できない処理があるので、このタイミングのフックは非常に重宝します!

使い方

例えば特定のページを404にしたり、特定のページをリダイレクトさせる場合

function custom_redirect() {
  //投稿者アーカイブページを404
  if(is_author()) {
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
  }
  //スラッグ名「test」の固定ページをTOPにリダイレクト
  elseif(is_page('test')){
    wp_safe_redirect(home_url('/'));
    exit();
  }
}
add_action( 'template_redirect', 'custom_redirect' );

こんな感じでページを表示する最初のタイミングで条件分岐して処理を書くことができます。

他にも

  • 特定のページでセッションをクリアしたり保存したり
  • POSTGETなどのフォームの受信処理
  • DBやプラグインを使ったデータ処理

など、テンプレートファイルに直接書きたくないような処理をこのフックで書いておくことでスッキリします。

さいごに

アクションフックは他にもいろいろ便利なものがあります。このフックを使ったカスタマイズ性がWordPressの良いところだと思うので、便利なものがあればまたご紹介できればと思います。