説明
template_redirect は、表示するテンプレートが決まる直前に実行されるアクションです。条件付きのリダイレクトなどに使います。
基本構文
do_action( 'template_redirect' )
引数
引数はありません。
戻り値
引数はありません。
使い方(サンプル)
add_action( 'template_redirect', function() {
if ( is_page( 'old' ) ) {
wp_safe_redirect( home_url( '/new/' ), 301 );
exit;
}
} );
注意点
- 条件分岐タグ(
is_*())が使える最初の安定したタイミングです。 - リダイレクト後は
exitを忘れずに。
実務での使いどころ
- ページを表示する前に、条件に応じて、リダイレクトするとき(旧URLの転送、会員限定ページの制御)。
- 条件分岐タグを使った、判定を行うとき。
よくあるミスと対処
- リダイレクトのあとに、
exitを書いていない。後続の処理が、実行される。 - 移動先を、ユーザーの入力から決めている。自サイトの中への移動なら、
wp_safe_redirect()を使い、許可されていないホストへは移動しないようにする。 - 条件分岐タグを、
initなど、早すぎるフックで使い、判定できない。条件分岐タグは、このフック以降で使う。
NG例
add_action( 'template_redirect', function () {
if ( is_page( 'old' ) ) {
wp_safe_redirect( home_url( '/new/' ), 301 ); // exit がない
}
} );
OK例
add_action( 'template_redirect', function () {
if ( is_page( 'old' ) ) {
wp_safe_redirect( home_url( '/new/' ), 301 );
exit;
}
} );
使い分け早見表
| フック | 実行されるタイミング(早い順) |
|---|---|
init |
WordPressの初期化が、終わったとき(条件分岐タグは、まだ使えない) |
wp_loaded |
すべての準備が、終わったとき |
template_redirect |
テンプレートを選ぶ前(条件分岐タグが使える) |

コメント