WordPressで特定のページをリダイレクトする方法

下書きページの存在など見せたくないページがあるときにそのページのURLを知っているユーザーからは直リンクで見られてしまうこともあります。 幾つかの方法でそのようなページにアクセスした際に他のページヘリダイレクトして特定ページヘアクセスさせないようにできます。 今回は2つの方法を紹介したいと思います。

変数としてアクセスさせたくないページのURLを$source_url,飛ぶ先のURLを$dest_urlとします。

1,add_rewrite_ruleを利用する。

これはWordPressに標準で備わっている関数で以下のように使用します。

add_rewrite_rule('$source_url', '$dest_url','top');

これで終わりです。これをWordPressでフックとしてどこかに引っ掛けてもいいですし、functions.phpの最初に記述しても大丈夫です。 第三引数に’top’を指定することでこのルールは WordPressのすべての既存ルールに優先されます。’bottom’ の場合、ルールはすべての既存ルールがマッチしない場合に検査されます。

注意点 ブラウザの上のURLバーに表示されるURLはアクセスさせたくないページのURLのままとなっています。つまり画面自体は変更させられますがブラウザに表示されるURL自体は変更できません。次の方法は少し面倒くさいですが表示されるURLも変更できます。

2,wp_redirectを利用する

処理としては上記の方法よりも煩雑になります。

//現在ページのURLの取得
$url = $_SERVER["REQUEST_URI"];

//取得したURLがアクセスさせたくないURLかどうかの比較
$match = preg_match('<.$source_url.>', $url);

if($match === 1){
  wp_redirect($dest_url, 302);
  exit;
}

これでもし現在ページのURLがアクセスさせたくないURLだったときに特定ページへリダイレクトさせることができます。 wp_redirectは第二引数にリダイレクトのステータスコードを取ります。

この方法も1の時と同様、読み込まれる最初のタイミングで起動されるようなところに記述しておくのが良いでしょう。