WordPress:はてなから移行する場合の permalink rewrite プラグイン

ある日突然、はてなブログから Wordpress に移行しようかと思い始めました。はてなブログの契約がまだ1年ありますのでその間にいろいろ調べてみようと思います。



パーマリンク(URL)の維持

一番の課題はパーマリンクを維持できるかです。これができないとこれまで蓄積されてきた各ページの検索インデックスが消えてしまいます。

結論から言いますと、Wordpress のリライトルールにはてなブログの記事URLフォーマットを追加すれば可能です。そのためのプラグインが記事の最後にあります。


記事データのインポート

おそらくインポートする前にデータを修正したほうがいい部分が出てくると思いますが、これは次回以降です。


Wordpress のパーマリンク設定

デフォルトのパーマリンク設定は「日付と投稿名」になっていると思います。変更はインポートの後でも問題ありません。データベースに保存されるデータはパーマリンク設定とは関連していません。


f:id:ausnichts:20210817144737j:plain


パーマリンクを何に設定するかですが、やはり「投稿名」がベストだと思います。ただし、ざっと Wordpress を試したところでは、投稿名は自動で記事タイトルになるのですが、一度保存しないと変更できないようになっているようです。

「URL スラッグ」というテキストボックスです。

タイトルは一般的に日本語で入れると思いますので、うっかりしていますとそのまま日本語で公開されています。注意が必要です。プラグインでなんとかなると思いますがこれも後日です。


なお、パーマリンクはサイト公開後に変更してはいけません。そのパーマリンクで検索インデックスに登録されたものを変更しますと「お探しのページは見つかりません」になります。


はてなブログのパーマリンク

はてなブログのパーマリンクは次の3つとカスタム URL の4つの可能性があります。


f:id:ausnichts:20210817151256j:plain


これをリライト用の正規表現で書きますと、

  • 標準 …… ^entry/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+)$
  • タイトル …… 同上
  • ダイアリー …… ^entry/([0-9]{8})/([0-9]{10})$
  • カスタム …… ^entry/([^/]+)$

こうなりますので、これを Wordpress のパーマリンクに書き換えるようリライトルールに追加すればいいということになります。


Wordpress のリライトルール

まだ Wordpress をテストサイトにインストールしてから2、3日ですので間違っている可能性もありますが、Wordpress のページ表示は、まず該当サイトに来たリクエストはすべてサイトトップの index.php に投げられ、グローバル変数 $wp_rewrite に収められたリライトルールに則って書き換えられるようです。


リライトルールはテーマの index.php の get_header(); の後に var_dump($wp_rewrite); と書き入れれば見られます。


f:id:ausnichts:20210817163902j:plain


すでにはてなブログ用のリライトルールを追加したキャプチャーです。赤枠で囲った3行が追加したルールです。


リライトルールの追加

add_rewrite_rule() を使う方法もありますが、rewrite_rules_array でやってみます。

こちらにサンプルコードがあります。


以下がはてなブログ用のリライトルール追加コードです。


add_filter('rewrite_rules_array','imz_HatenaRewriteRules');
add_filter('init','flushRules');

// flush_rules()
function flushRules(){
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}

// はてなブログからwordpressリライトルール
function imz_HatenaRewriteRules($rules)
{
    $newrules = array();
    $newrules['^entry/([^/]+)$'] = 'index.php?name=$matches[1]';
    $newrules['^entry/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+)$'] = 'index.php?name=$matches[1]-$matches[2]-$matches[3]-$matches[4]';
    $newrules['^entry/([0-9]{8})/([0-9]{10})$'] = 'index.php?name=$matches[1]-$matches[2]';
    return $newrules + $rules;
}


ただし、ドキュメントにもありますように、この flush_rules関数はかなり遅いらしく、また、リライトルールは一度追加すれば、flush_rules関数を実行したり、「パーマリンク設定」で保存をクリックしたりしなければそのまま保持されます。データベースに保存されるということです。ですので、一度だけ実行すれば OK です。

ただ、まだ一度だけ実行する場合にどうすればいいのかわかりません(笑)。次回以降です。


はてなブログ用リライトルールプラグイン

  1. 下のリンクをクリックしてダウンロードしてください。

  2. プラグインの有効化

    1. プラグインの新規追加でダウンロードした zipファイルをインストールしてください。
    2. プラグインを有効化すれば即追加されます。
    3. はてなブログの URL でアクセスして確認してください。
    4. はてなブログの URL で問題なくアクセスできればプラグインを無効化してください。


ライセンス等

ご使用の場合は以下の注意事項をお守りください。

  • ライセンスは IMUZA.com にあります。
  • 当記事の Javascript を使用してのはてなブログ用テーマの制作、公開は商用以外は自由です。ただし、記事内、あるいは紹介サイト内に IMUZA.com へのリンクを挿入してください。
  • 当記事の CSS への改変、公開は自由です。
  • 特別問題が発生することはありませんが自己責任でお使いください。
    問題が発生した場合は削除すればもとに戻ります。
  • お問い合わせ、バグの報告、仕様変更のご要望等は Contact Us までお願いします。