WordPressでページ遷移を制御したいときに便利なのが wp_redirect()
関数です。
たとえば、ログイン後の遷移先変更や、条件に応じた強制リダイレクトなどに活用されます。
この記事では wp_redirect()
の基本的な使い方から、実践的な使用例までを紹介します。
目次
wp_redirect() とは?
wp_redirect()
は、PHPの header()
関数をラップして、WordPressの内部でリダイレクト処理を簡単に実装できるようにした関数です。
基本構文
wp_redirect( $location, $status );
exit;
$location
:リダイレクト先のURL(必須)$status
:HTTPステータスコード(任意、デフォルトは 302)
※ wp_redirect()
の直後に必ず exit;
を記述するのが推奨されています。そうしないと後続の処理が実行されてしまうことがあります。
使用例:ログインしていないユーザーをログインページにリダイレクト
function my_redirect_if_not_logged_in() {
if ( ! is_user_logged_in() ) {
wp_redirect( wp_login_url() );
exit;
}
}
add_action( 'template_redirect', 'my_redirect_if_not_logged_in' );
このコードは、未ログイン状態のユーザーがページにアクセスしたときに、ログインページへリダイレクトします。
使用例:特定の投稿タイプから別ページへリダイレクト
function redirect_custom_post_type() {
if ( is_singular( 'product' ) ) {
wp_redirect( home_url( '/special-offer/' ) );
exit;
}
}
add_action( 'template_redirect', 'redirect_custom_post_type' );
この例では、カスタム投稿タイプ「product」の個別ページを開いたときに、特別オファーのページへリダイレクトします。
ステータスコードを使い分ける
wp_redirect()
の第二引数では HTTP ステータスコードを指定できます。主に以下のように使い分けます:
301
:恒久的なリダイレクト(SEO対策に使用)302
:一時的なリダイレクト(デフォルト)307
:一時的だが、メソッド(GET/POST)を維持したままのリダイレクト
例:301リダイレクトを明示的に指定する
wp_redirect( home_url( '/new-page/' ), 301 );
exit;
使用上の注意
wp_redirect()
を使うには、ヘッダーが送信される前に実行する必要があります(header already sent
エラーに注意)。template_redirect
フックなど、テンプレート読み込み直前のタイミングで使うのが一般的です。exit;
を忘れないこと。
よくある用途
- ログイン後のリダイレクト先を変更
- 特定条件でアクセスを制限
- URL構造変更時の301リダイレクト
公式ドキュメント
まとめ
このように、wp_redirect()
を使えば WordPress サイトの動線やアクセス制御を柔軟に設計できます。シンプルですが非常に便利な関数なので、条件に応じた遷移処理を行いたいときにぜひ活用してみてください。