定番ブログエンジンの「WordPress」では、管理画面の「設定」→「パーマリンク設定」で記事のURLの書式のカスタマイズが可能だ。記事IDだけのシンプルなURLや、記事のスラグ(識別名)を含む分かりやすいURLなど、好みの形式のURLで記事を公開できる。
しかし、パーマリンクを変更すると古い書式のURLではアクセスできなくなってしまうため、しばらく運営して多くの記事を公開済みのブログでは、なかなか書式の変更に踏み切れない。
旧URLをリンク切れにせずに記事URLの書式を変更したければ、テーマディレクトリの「functions.php」で「rewrite_rules_array」フィルタに関数を登録して、URL認識のルールを追加してやろう。
ただし、このままでは新URLのページと旧URLのページが別々に存在する状態になってしまう。旧URLのアクセスは新URLのページに転送されるようにしたければ、「template_redirect」にリダイレクト処理を行うアクションフック関数を登録しよう。
function oldstyle_permalink_rule($rules){
return(array('(\\d+)'=>'index.php?p=$matches[1]')+$rules);
}
add_filter('rewrite_rules_array', 'oldstyle_permalink_rule');
function oldstyle_permalink_redirect(){
if(is_single() && get_permalink()!=='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']){
wp_redirect(get_permalink(),301);
die();
}
}
add_action('template_redirect','oldstyle_permalink_redirect');
古い書式の記事URLを新しい書式のURLに転送されるようにするには、テーマディレクトリの「functions.php」に上記のようなコードを追加すればいい。
一つ目のfunctionでは、古い書式のパーマリンクを記事検索クエリに変換するルールを追加している。「=>」の左側は記事URLにマッチする正規表現、右側は正規表現の括弧とクエリ変数の対応を記述する。記事IDは「p」、記事のスラグは「name」、年は「year」、月は「monthnum」、日は「day」のクエリ変数に割り当てればいいぞ。
2つ目のfunctionは、管理画面で設定した正式な書式のURL以外での単一記事ページへのアクセスを正式なURLに転送する処理だ。こちらは上記のままでどんなサイトでも使用できるぞ。
処理を記述したfunctions.phpをアップロードして、管理画面の「設定」→「パーマリンクの設定」で「変更を保存」ボタンを押すと、rewrite_rules_arrayフィルタで追加した書式のURLが認識されるようになる。


全世界1,000万以上ダウンロード超え!水分補給サポートアプリ最新作『Plant Nanny 2 - 植物ナニー2』が11/1より日本先行配信開始中
たこ焼きの洞窟にかき氷の山!散歩を習慣化する惑星探索ゲーム『Walkr』がアップデート配信&6/28までアイテムセール開始!
【まとめ】仮想通貨ビットコインで国内・海外問わず自由に決済や買い物ができる販売サイトを立ち上げる
WordPressのRSSやAtomのURLって変更できないの?
WordPressの画像表示ページのURLが気に入らない。書式って変えられないの?
WordPressの固定ページを「.html」付きのURLにすることってできないの?
WordPressの固定ページに不特定多数の階層下URLのページを作る事ってできない?
WordPressの管理画面でタグが付いていない記事だけを一覧表示する方法って無いの?
WordPressでURL用の記事名を付け忘れたときに長い名前にならないようにしたい
