[WordPress]パーマリンク設定を変えちゃって以前のURLが404になった時にした対処

最終更新: 2019/02/05/公開: 2019/01/27
この記事は 2019年1月27日 に投稿されました。
内容が古いかもしれません。ご注意ください。
※最後に更新されたのは 2019年2月5日 です。

ニッチケースなので備忘録として役に立つのかわかりませんがメモ。

経緯

なんか急に張り切って作りかけだったサイトのテーマ等々更新しました。

で元々のパーマリンク設定が「数字ベース」だったので、アナリティクスを見ていたときにアクセスされたページが一体なんなのかまったくわからないという問題が発生しており、「投稿名」に変えたわけです。

そうしたら前の形のパーマリンクはNot Foundになってしまって、これだと主に他サイトからリンクを張ってくれている場合には参照できないことになるというので慌てて直しました。

やったこと

数字ベースはURLの末尾が投稿IDの数字なので、URLからそこだけ切り取って
「サイトアドレス/?p=数字」という形式のURLへ一旦リダイレクトさせるソースを404.phpへ追記しました。
→ 404だったらサーバーからステータスコードが返った後なので header.phpにソースを移動、301のステータスを返す形に変更しました。

if ( isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] == 'on' )  
{  $protocol = 'https://';  }  
else  
{  $protocol = 'http://';  }
$url  = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];  

$post_id_key = strstr($url, '/archives/'); //記事id取得用
$post_id_num = str_replace('/archives/', '', $post_id_key); //不要部分削除

if ( preg_match("/archives\/[0-9]{1,4}/", $url) ){ //archives以降の数字を取得してパラメーターのURLへ誘導
  header("Location:".home_url('/?p='.$post_id_num) , true, 301);
  exit;
}
  1. URLを取得
  2. 「/archives/」からの文字を取得・いらん部分削除
  3. 「/archives/」と4桁までの数字を含む部分がURLに存在したらリダイレクト

ということで応急処置してあります。先日一気にスラッグ修正したらすべての記事の最終更新日が2019年1月24日になってしまった……