template_redirect フックの使い方|説明・引数・注意点

説明

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 テンプレートを選ぶ前(条件分岐タグが使える)

関連項目

wp_safe_redirect()、init

公式リファレンス:template_redirect | WordPress Developer Resources

コメント

タイトルとURLをコピーしました