別のページへリダイレクトします。行き先が自分のサイトの中(許したドメイン)のときだけ移し、ほかのサイトへは移しません。利用者が入れた URL で移すときの守りになります。
書き方
wp_safe_redirect( string $location, int $status = 302, string|false $x_redirect_by = 'WordPress' ): bool
$location:行き先の URL$status(省略できる):302(一時的)・301(ずっと)など- 行き先がほかのサイトのときは、代わりに管理画面(
admin_url())へ移します。
使い方の例
// ログインしていない人を、会員ページからトップへ移す
add_action( 'template_redirect', function () {
if ( is_page( 'members' ) && ! is_user_logged_in() ) {
wp_safe_redirect( home_url( '/' ) );
exit;
}
} );
PHP の header() との違い
- PHP だけなら
header( 'Location: https://example.com/' ); exit;と書きますが、行き先を確かめません。WordPress の中ではwp_safe_redirect()を使います。 - ほかのサイトへ移したいとき(決まった外の URL)は
wp_redirect()を使います。利用者が入れた値をそのまま渡さないようにします。
よくある間違い
- exit; を書き忘れる:書かないと、そのあとの処理(ページの表示など)が続いてしまいます。
- 画面に何か出したあとに呼ぶ:「Cannot modify header information」になります。
template_redirectなど、表示の前のフックで呼びます。 - 許したいほかのドメインがあるときは、
allowed_redirect_hostsのフィルターで足します。
関連する関数
wp_redirect():行き先を確かめずに移すhome_url():サイトの URL を作るwp_validate_redirect():行き先がサイトの中かだけを確かめる- header() でのリダイレクト(PHP):WordPress を使わない PHP で別のページへ移す



