【WordPress】プラグイン無しでリダイレクトさせる方法

【WordPress】プラグイン無しでリダイレクトさせる方法

リダイレクト処理は.htaccessの編集が一般的ですが、もっと簡単なfunctions.phpで行えるリダイレクト処理について解説します。

目次

functions.pnpでリダイレクトできる関数は2つ

WordPressにはリダイレクト用の関数が2つ用意されています。

  • サイト内でのリダイレクト:wp_safe_redirect()
  • 別サイトへリダイレクト:wp_redirect()

WordPressサイト内の同じURLへのリダイレクトには、wp_safe_redirect() 関数を使用します。
この関数は、まずリダイレクト先のURLが有効かどうかを確認するため、より安全なリダイレクトになります。

一方、別のサイトのURLへのリダイレクトには、どんなURLでも扱えるwp_redirect() 関数を使用します。

関数の使い方

関数の使い方は以下の通り。

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

第1引数には「絶対URL」を渡します。
第2引数は任意で、省略すると302リダイレクトとして処理されます。

  • 301:恒久的なリダイレクト(完全に引っ越しした時など)
  • 302:一時的なリダイレクト(いずれ元に戻す場合など)

なお、リダイレクト直後にexit;を記述して処理を終了します。
これはリダイレクト後にページのコンテンツが出力されたり、不要な処理が実行されたりすることを防ぐためです。

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

サイト内でのリダイレクト:wp_safe_redirect()

パーマリンクを「link」と「rink」で間違えて設定した場合を想定します。

以下は「https://example.com/rink/」から「https://example.com/link/」へリダイレクトする例です。

// リダイレクト
function redirectFunc(){
  // ページのURLを取得
  $url = $_SERVER['REQUEST_URI'];

  // URLに「rink」が入っていたら「https://example.com/link/」にリダイレクトする
  if (strpos($url, 'rink') !== false) {
    wp_safe_redirect(home_url('/link/'), 301);
    exit;
  }
}
add_action('template_redirect', 'redirectFunc');
  1. $_SERVER['REQUEST_URI']で、現在のURLのパス部分を取得します。
  2. パス内に任意の文字列(例:rink)が入っていたら、指定のURLに301リダイレクトが行われます。
  3. exit によって処理を終了します。

これらの処理を関数化し、リダイレクト専用のアクションフックtemplate_redirectで発火させます。

別サイトへリダイレクト:wp_redirect()

以下は「https://example.com/rink/」から「https://test.com/link/」へリダイレクトする例です。

// リダイレクト
function redirectFunc(){
  // ページのURLを取得
  $url = $_SERVER['REQUEST_URI'];

  // URLに「rink」が入っていたら「https://test.com/link/」にリダイレクトする
  if (strpos($url, 'rink') !== false) {
    wp_redirect('https://test.com/link/', 301);
    exit;
  }
}
add_action('template_redirect', 'redirectFunc');

考え方はwp_safe_redirect()と同じです。

リダイレクトの条件を変更

「文字列が含まれているか」を判定する際にはstrpos()関数が処理最速です。

// URLに「rink」が含まれる場合
if (strpos($url, 'rink') !== false) {...}

// URLが「/rink」から始まる場合
if (strpos($url, '/rink') === 0) {...}

ページが存在する場合は、以下のように記述することもできます。

// 著者アーカイブからトップページへリダイレクトさせる
if ( is_author() ){
  wp_safe_redirect(home_url('/'));
  exit;
}

まとめ:ちょっとしたリダイレクトに便利

今回の方法は簡単に管理できるため、ちょっとしたリダイレクトする際に便利です。

コードの編集に自信のない方はバックアップをとってから行いましょう。

おすすめWEBスクール

WEB制作やWEBデザインを学びたいなら、SNSでも話題の「デイトラ」がおすすめ!
どのコースも10万円前後と業界最安値で、副業や転職に向けて十分なスキルを身につけることができます。

\ ここから飛べます! /

役に立ったら他の方にシェア

お気軽にコメントどうぞ

コメントする

目次