★★★ たった "1日" でできるWordPressブログの作り方講座 ★★★ はじめてみる
この記事には「PR」「宣伝」が含まれます

プラグインなしでWordPressページをリダイレクトする方法【PHPコード例】

WordPressで次のような処理が必要でした

  • 投稿ページを個別にリダイレクト
  • ある規則に沿ってページリダイレクト
  • ただしプラグインは使いたくない

本当はプラグインを入れるのが確実だけど、どうしてもプラグインなしでリダイレクト(Redirect)したい場面があります。(PHPコードでどうにかしたい)

そんなマニアックな悩みへの解決策です。

ただし自己責任で行ってください。

個別ページごとにリダイレクトする方法

例えばこんなケースを考えてみましょう。

↓ リダイレクトさせたいWP投稿ページURL

https://example.com/hoge/post-1234

↓ これを次のURLにリダイレクトさせたい

https://example.com/hoge/jikosyoukai

後から投稿URLを変えたいパターンです。

WordPress投稿画面では記事作成すると post-1234 みたいなスラッグが自動生成され、それに気づかないで記事投稿することがあります。そんな時に個別URLだけリダイレクトさせたいみたいな…

※ より正確に書くなら 自動生成されたスラッグで公開 ⇒ Googleにインデックスされる ⇒ 検索流入でアクセスがある ← こういうスラッグを手動変更できない状況を想定

そんな時は次の手順でリダイレクト可能です。

1.使用してるテーマのfunctions.phpを開く

ここではPHPコードで何とかします。

だから初めにテーマのfunctions.phpを開きましょう。

↓ 外観 -> テーマファイルエディター を開く

外観 -> テーマファイルエディター を開く

↓ 右のファイル一覧から function.php オープン

テーマファイルエディターの右のファイル一覧から function.php オープン

ただし親テーマを直接編集するのは良くありません。

念のために子テーマを作っておいてください。

▼ プラグインによるWP子テーマの作り方

WordPress子テーマを面倒なことせず1分で作成する方法
WordPressで子テーマを作る場合、手動作成するのは慣れない人にとって無駄に手間と時間がかかる作業です。そこでここでは初心者でも簡単に子テーマが作れる Child Theme Configurator の使い方を紹介します。

なくてもいいけど親テーマを更新したら親テーマへの変更はすべて消えちゃいます。それを防ぐために子テーマという仕組みがあるんですね。

とりあえずfunctions.phpを開ければヨシ

2.リダイレクト用のPHPコードを追加する

ここでは次のリダイレクトをします。

  • リダイレク元ページURL
    https://example.com/hoge/post-1234
  • リダイレクト先ページURL
    https://example.com/hoge/jikosyoukai

その場合はfunctions.phpにこんなコードを追加します。

↓ 個別にリダイレクトさせるコード例

function redirect_page() {
    if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'
    ) {
	  $protocol = 'https://';
	}else {
	  $protocol = 'http://';
	}
    $currenturl = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    $request_uri = $_SERVER['REQUEST_URI']; 
    switch ($request_uri) {
        case '/hoge/post-1234':
            $urlto = home_url('/hoge/jikosyoukai');
            break;
        default:
            return;
    }
    
    if ($currenturl != $urlto)
        exit( wp_redirect( $urlto ) );
}
add_action( 'template_redirect', 'redirect_page' );

何してるかは大まかに分かりますよね?

分からないなら手を出さないでください。

リダイレクトを正規表現的に行うPHPコード例

ここからはさらに応用的な話です。

もっと汎用的なリダイレクト処理をしてみます。

例えば次のリダイレクトルールを考えます。

  • リダイレクト前 : 投稿日時が含まれるURL
    https://example.com/2022/11/19/my-post
  • リダイレクト後 : 日時を含まないURL
    https://example.com//my-post

初めはスラッグ規則を「投稿日時+投稿名」にしていたけど、あとからパーマリンク設定を変えて「投稿名」だけにしたケースです。

その場合、汎用的なリダイレクトで対処可能です。

↓ より汎用的なリダイレクトPHPコード例

function redirect_page() {
    if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'
    ) {
        $protocol = 'https://';
    } else {
        $protocol = 'http://';
    }
    $currenturl = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    $request_uri = $_SERVER['REQUEST_URI']; //wp_make_link_relative($currenturl);
    $redirect_pattern_1 = '/[0-9]{2}\\/[0-9]{2}\\/[0-9]{2}/i';
	if(preg_match($redirect_pattern_1, $request_uri) !== 0){
		$urlto = home_url(preg_replace($redirect_pattern_1, '', $request_uri));
	}else{
		return;
	}
    if ($currenturl != $urlto)
        exit( wp_redirect( $urlto ) );
}
add_action( 'template_redirect', 'redirect_page' );

かなり分かりにくいですね…

本当に原始的にリダイレクトルールを定義してます。

普通にリダイレクトプラグイン使うのが確実

身もふたもないけど次の結論に至りました。

《《 普通にプラグイン使う方が楽 》》

だって自分でPHPコードを書いてしまうと、

  • リダイレクトの度にコード追加が必要
  • WordPress構成を破壊するリスクがある
  • 不具合が出たらすべて自己責任になる

ここまでリスクを取る価値はあるのか…

リダイレクト規則が1つか2つなら問題ないかも

でも複数のリダイレクトルールが必要なら、
大人しくプラグインを使うのが賢いと思います。

▼ この記事のRedirectionプラグインが優秀!

WordPress内だけでリダイレクトを設定&管理! Redirection の使い方
Redirectionプラグイン使うとサーバー側のファイルを一切編集することなくWordPress内だけでリダイレクト設定から管理まで全て行えます。超便利だったので、初心者向けに使い方・実用な応用例をまとめました。

プラグインを使うのが確実ですね。

The following two tabs change content below.

フク郎

昔はプログラミングに熱中していたが、ブログとWordPressに興味を持ち始め今はサイト・ブログ作りが生きがい。自分の「好き」をブログに変えたい、情報発信したい人に役立つWordPress術・サイト構築術を発信中。一日一歩楽しんでブログ構築できるように読みやすい&楽しい記事作りを心がけています。メールアドレス : fukuropress@gmail.com