Webサイトを運営していると、特定のページにリダイレクトさせたい場面が出てきます。当記事では、プラグインを利用せずに、functions.phpからリダイレクトを制御する方法について解説します。

ただし、プラグインを使った方が管理しやすいケースも多いです。以下で、リダイレクトを管理できるプラグイン「Redirection」の使い方について解説してますので、こちらもご覧いただければ幸いです。

WordPressで特定のページにリダイレクトできる関数2つ

WordPressサイトでリダイレクトを行う時は、テーマの「functions.php」に記入する形で実装します。この時に使うのが以下の2つの関数です。

wp_redirect 内部リンク(サイト内ページにリダイレクトさせる時) 公式ページ
wp_safe_redirect 外部リンク(他サイトのページにリダイレクトさせる時) 公式ページ

どちらも基本的な使い方は同じなのですが、リダイレクト先のページが「内部リンク」か「外部リンク」かで使い分けます。それでは順番にご紹介していきます。

  • リダイレクト関数の基本的な使い方
  • リダイレクト関数の実行タイミング
  • 特定のページにリダイレクトさせるサンプル

リダイレクト関数の基本的な使い方

まず、リダイレクト用関数の基本的な使い方についてご紹介します。どちらも、第一引数に「リダイレクト先のURL」、第二引数に「ステータスコード(301や302など)」を指定して利用します。

wp_redirect( 'リダイレクト先のURL', 'ステータスコード' );
wp_safe_redirect( 'リダイレクト先のURL', 'ステータスコード' );

ステータスコードによって、リダイレクトの意味合いが変わってきますので、以下の記事を参考に判断してください。

なお、リダイレクト処理を記載した後は「exit;」を記載するようにしましょう。

/* リダイレクト後に「exit;」を記載 */
wp_redirect( 'リダイレクト先のURL', 'ステータスコード' );
exit;

リダイレクト関数の実行タイミング

基本的には、テンプレートファイルが読み込まれる直前のタイミング「template_redirect」で実行すれば問題ありません。

実際に書くと以下のような形になります。(functions.phpに記載します。)

/* 'template_redirect'で実行 */
add_action( 'template_redirect', function(){
  // この中にリダイレクト処理を書く
  wp_redirect( 'リダイレクト先のURL', 'ステータスコード' );
  exit;
} );

このフックでは、条件分岐タグが使えます。次に特定の条件に応じたリダイレクト方法をご紹介します。

なお、上記のようなアクションフックの使い方は以下をご覧ください。

特定のページにリダイレクトさせるサンプル

それでは実際にリダイレクトさせるサンプルコードをご紹介します。今回行うのは、404ページからトップページにリダイレクトさせる記述になります。(内部リンクのため、wp_safe_redirectを利用)

/* 例)404ページからトップページに301リダイレクト */
add_action( 'template_redirect', function(){
  // 404ページだったら
  if ( is_404() ) {
    // トップページに301リダイレクト
    wp_safe_redirect( home_url( '/' ), 301 );
    exit();
  }
} );

こちらをfunctions.phpにそのまま記載すると正常に404ページにアクセスしても、トップページに飛ばされるようになります。

今回使ったような条件分岐タグ「is_404()」は、様々な種類が用意されています。以下に主要な条件分岐タグをまとめてますので、ぜひ参考にしてください。

まとめ

今回は、WordPressでプラグインを使わずにリダイレクトを行う方法についてご紹介しました。意外と簡単に実現できますが、リダイレクト処理が多くなると、管理しにくくなるので、プラグインの方が楽かもしれません。

また、大規模なリダイレクトを行うタイミングとしては、サイトの引っ越しなどが該当しますよね。もし、引っ越しを考えているのであれば、弊社が10年間使ったドメインを移行した時の対策を以下にまとめましたので、ぜひ参考にしてください。