WordPressをカスタマイズする上で欠かせないのがアクションフックです。
今回はその中でもかなり使用頻度の高い「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こちらの記事の実行結果を見るとinit
やwp
よりも後で、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' );
こんな感じでページを表示する最初のタイミングで条件分岐して処理を書くことができます。
他にも
POST
やGET
などのフォームの受信処理など、テンプレートファイルに直接書きたくないような処理をこのフックで書いておくことでスッキリします。
アクションフックは他にもいろいろ便利なものがあります。このフックを使ったカスタマイズ性がWordPressの良いところだと思うので、便利なものがあればまたご紹介できればと思います。