【WordPress】特定のページをリダイレクトする方法|wp_safe_redirectとhome_url

URLを変更した、古いページを別の場所に統合した——といった場合に特定のページだけをリダイレクトしたい場面があります。この記事では、プラグイン・.htaccess・functions.php の3つの方法を、安全な実装の書き方とあわせて解説します。

この記事でわかること

  • プラグイン(Redirection)を使った設定不要の方法
  • .htaccess での設定(Cocoonの自動書き換え領域の注意)
  • wp_safe_redirect()home_url() を使った安全なコード実装
スポンサーリンク

プラグインを使用する方法

コードを書かずに設定したい場合は「Redirection」プラグインが便利です。

  1. 管理画面の「プラグイン」→「新規追加」から「Redirection」を検索してインストール・有効化する
  2. 「設定」→「Redirection」を開く
  3. 「追加のリダイレクト」欄に元のURL転送先のURLを入力して追加する

.htaccess ファイルを編集する方法

Apacheサーバーであれば、.htaccess に直接ルールを追加できます。編集前は必ずバックアップを取ってください。

.htaccess:特定ページのリダイレクト
Redirect 301 /old-page/ https://example.com/new-page/
WordPressの自動生成ブロックの外に書く
WordPress(Cocoon)は .htaccess# BEGIN WordPress# END WordPress の間を自動で書き換えることがあります。このブロックの内側にカスタムルールを書くと、パーマリンク設定の保存時などに消えてしまうため、必ずブロックの外(上か下)に追加してください。Nginxサーバーでは .htaccess は使えないため、サーバー設定側での対応が必要です。

functions.php ファイルを編集する方法

特定のページ(固定ページ)だけをコードでリダイレクトするには、template_redirect フックを使います。同一サイト内への遷移なら、home_url()wp_safe_redirect() を使うのが安全です。

functions.php:同一サイト内へリダイレクト(推奨)
add_action('template_redirect', function () {
  if (is_page('old-page-slug')) {
    wp_safe_redirect(home_url('/new-page/'), 301);
    exit;
  }
});
外部サイトへ転送したい場合は
転送先が他のドメイン(外部サイト)の場合は、絶対URLを指定して wp_redirect() を使います。wp_safe_redirect() は既定で自サイト以外のURLを許可しないため、意図的に外部へ転送する場合は wp_redirect() を選びます(第2引数のホワイトリストで許可ドメインを追加することも可能です)。
functions.php:外部サイトへリダイレクトする場合
add_action('template_redirect', function () {
  if (is_page('old-page-slug')) {
    wp_redirect('https://example.com/new-page/', 301);
    exit;
  }
});

関連するリダイレクトの実装

よくある質問(FAQ)

QPHPからリダイレクトする最良の方法は?
A同一サイト内なら wp_safe_redirect(home_url('/path/'), 301)、外部サイトへの転送なら wp_redirect($url, $status) を使います。301(恒久的)または302(一時的)のステータスコードを指定し、呼び出し直後に必ず exit; を書いてください。
Q特定のユーザーロールを特定のページにリダイレクトするには?
Awp_get_current_user() でユーザー情報を取得し、current_user_can() でロールを確認したうえで wp_safe_redirect() を実行します。ログイン直後のリダイレクトは login_redirect フィルターフックを使うのがベストプラクティスです(ログイン後のリダイレクト先を変える方法)。
Qtemplate_redirect アクションフックと wp_redirect の使い分けは?
Atemplate_redirectテンプレートが読み込まれる直前に発火するアクションフックで、「条件に応じてリダイレクトすべきか判定する」場所として使います。wp_redirect() / wp_safe_redirect() は、その条件が満たされたときに実際に転送を実行する関数です。

まとめ

  • コード不要:Redirectionプラグイン
  • サーバー設定.htaccess(Cocoonの自動生成ブロック外に書く)
  • コードで実装template_redirect + 同一サイト内は wp_safe_redirect(home_url(...))、外部サイトは wp_redirect()

技術レベルや要件に応じて方法を選び、コードで実装する場合はwp_safe_redirect() を基本にすると安全です。