wordpressでパーマリンクを変更するのでリダイレクトするプラグインを作る

eyecatch

Introduction

パーマリンクの設定をミスってしまった。ってことあるじゃないですか。
パーマリンクの設定を変えてしまってもいいのだけど、SEO的に過去のURLに繋がらなくなるのは困る。

そこでリダイレクトできるプラグインをいくつか探したけど、
良さげなのがなかったので作ってしまうことにした。

リダイレクトプラグインを作る

僕は日付有りから無しに変更しリダイレクトするようにしたけども、
カテゴリー有りから無しにとかURLの編集次第で、何でもできるはず。

wordpress codexに沿って作っていきます。

1.プラグインの名前

安直ですが、「redirects」とします。

2.プラグインファイル

これもそのままで「redirects.php」とします。

3.ファイル・ヘッダー

/**
 * Plugin Name: (プラグインの名前)
 * Plugin URI: (プラグインの説明と更新を示すページの URI)
 * Description: (プラグインの短い説明)
 * Version: (プラグインのバージョン番号。例: 1.0)
 * Author: (プラグイン作者の名前)
 * Author URI: (プラグイン作者の URI)
 * License: (ライセンス名の「スラッグ」 例: GPL2)
 */

これはcodexコピーで。内容は任意で書き換えてください。

4.ライセンス

自分用なので作りません。
公開を考えてる人は作ってください。

5.プラグイン実装

こってこてに書いていきます。

redirects.php

<?php
/**
 * Plugin Name: (プラグインの名前)
 * Plugin URI: (プラグインの説明と更新を示すページの URI)
 * Description: (プラグインの短い説明)
 * Version: (プラグインのバージョン番号。例: 1.0)
 * Author: (プラグイン作者の名前)
 * Author URI: (プラグイン作者の URI)
 * License: (ライセンス名の「スラッグ」 例: GPL2)
 */
if (!class_exists('Redirects')) {
  class Redirects{
    function redirection() {

      // リクエストされたURLの最後がスラッシュの場合、最後の1文字削除
      if (mb_substr($_SERVER['REQUEST_URI'], -1) == '/') {
        $requestUri = mb_substr($_SERVER['REQUEST_URI'], 0, -1);
      } else {
        $requestUri = $_SERVER['REQUEST_URI'];
      }

    // 管理画面、カテゴリー、ページャーは除外
    if (!preg_match('/wp-*/', $requestUri) 
      && !strpos($requestUri, 'category') 
      && !strpos($requestUri, 'page')) {
        // スラッシュ単位で分解
        $requestArray = explode('/', $requestUri);

        // URI組み立て
        $uri = 'https://' . $_SERVER['HTTP_HOST']
                  . '/' . $requestArray[count($requestArray) - 1];

        // リダイレクト(ルートもしくは、リダイレクト後はリダイレクトしない)
        if ($requestUri != "" 
          && (('https://' . $_SERVER['HTTP_HOST'] . $requestUri) != $uri)) {
          header ('HTTP/1.1 301 Moved Permanently');
          header('Location:'.$uri);
          exit();
        }
      }
    }
  }
}

$redirect_plugin = new Redirects();

if (isset($redirect_plugin)) {
    add_action('init', array($redirect_plugin, 'redirection'), 1);
}

説明

  • 11行目~13行目:リクエストURIを取得。最後にスラッシュがあった場合にはスラッシュを除去。
  • 23行目~25行目:管理画面、カテゴリー一覧画面、ページャーはリダイレクトしない。
  • 27行目    :リクエストURIをスラッシュで分解
  • 30行目~31行目:「/yyyy/mm/dd/ポスト名」となっているので、最後のポスト名で組み立て
  • 33行目~34行目:リダイレクトループ対応。リダイレクト後にもこのプラグインは呼ばれるので、リダイレクト後はリダイレクトしないように
  • 35行目~36行目:リダイレクト実行。301は恒久的でリダイレクト先のURLがインデックスされるようになります。

注意

  • header前に改行やスペースを出力するとエラーになります。真っ白。
  • 36行目のlocation:はlocationとコロンの間にスペースを開けないでください。

配置します

/wp-content/plugins/test-redirects
に「redirects.php」でアップロードしました。

「redirects」は公式にアップされているプラグインと被るのでフォルダ名は注意してください。

僕は使わなかったけど、参考までに

Permalink Redirect

Redirection