けい坊の日記

ドラクエ好きによるドラクエのプレイ記録。

日常生活

【WordPress】はてなブログ式パーマリンクの問題点と改善方法

投稿日:2020年7月19日 更新日:

唐突ですがWordPressの話です。

少し前まで、移転前のはてなブログと同じ形式のパーマリンクを使っていたのですが、それが急に使えなくなるという事象がありました。

その原因と対策について、書き残しておこうという記事です。


事象

はてなブログから移転する際、リダイレクト設定を容易にするためにパーマリンクの形式をはてなブログと同じにしていました。下記のようなものです。

/entry/%year%/%monthnum%/%day%/%hour%%minute%%second%/

従来はこれで問題なかったのですが、今年の5月初めごろ、急にこの形式のリンクが機能しなくなるという事象が発生しました。

具体的に言うと、個別投稿ページではなくアーカイブページが表示されるようになってしまいました。

今までこう表示されていたものが…

こうなってしまった

原因

色々調べたところ、WordPress5.4.1へのアップデート時の仕様変更によるものだということが判明しました。

WordPressのフォーラムに同様の症状になった方の投稿があり、参考になりました。/wp-includes/class-wp-query.phpの実装が変わり、個別記事ページの判定方法が変更されたようです。

以前は、はてなブログのリンク形式のように投稿日時を秒数まで指定することで個別投稿ページと判定される処理でした。つまり、URLの中に投稿時間の秒数まで含まれていればそれはさすがに記事を一意に特定していると言えるよね、という思想だったということです。しかし今回のアップデートにより、秒数まで一致している複数記事が存在するケースも理論上はあり得る、というより厳格な考え方に基づいて、投稿タイトルや投稿IDをリンクに含めることが必須となった、ということのようです。

個別投稿ページと判定される条件が厳格化された結果、上記のようにアーカイブページとなってしまったということです。

暫定対策

/wp-includes/class-wp-query.phpをアップデート前のバージョンに戻してやることで対処できました。

実際、この状態で2ヶ月くらい運用していたのですが、バージョンの古いプログラムでWordPressの方針に沿わないパーマリンクを使い続けるのもよろしくないと思い、本格対策を行うことにしました。

本格対策

まずは、パーマリンク設定を変更。シンプルに投稿IDだけのURLになるようにしました。

/%post_id%/

次に、元々のはてなブログ形式のURLから、新しいURLへリダイレクトする設定を行いました。

リダイレクト設定の方法はいろいろあると思いますが、最も手っ取り早く、Redirectionというプラグインを使うことにしました。リダイレクト元のURLとリダイレクト先のURLを対応づけるCSVを作ってインポートするだけなので、非常に簡単です。

各記事に対応する%post_id%の値は、データベースを直接参照して取得するのが早かったです。MySQLにログインして、postsテーブルからIDとpost_nameを取得すればOK。

リダイレクトの設定が完了したら、/wp-includes/class-wp-query.phpを最新版にアップデート。そして、旧URLにアクセスして新URLにリダイレクトされていることを確認して作業完了しました。

以上、簡単ですが、はてなブログ式パーマリンクが機能しなくなった理由とその対策について書いてみました。同様の事象に見舞われた方の参考になれば幸いです。


-日常生活

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

マニアックすぎるドラクエクイズ

新型コロナウイルスの影響で東京都中心に外出自粛が呼びかけられている昨今。家にいる時間が長くなり退屈している方も多いのではないかと思います。私などは元々、休日は家で過ごす時間が長いほうなので全く苦になり …

予測の精度を評価する方法

最近、新型コロナのPCR検査の精度が話題になったりしていますが、予測の精度の評価の仕方は意外と直感に反するところがありますので、私なりにちょっと説明してみようという記事です。 題材にするのはDQライバ …

スマホさえあれば家の鍵がなくても生き延びられた

今朝、いつものようにランニングをしていたのですが、その際に家の鍵を持つのを忘れるというトラブルが発生しました。土曜朝のランニングは、妻の出勤に合わせて一緒に車で出発し、適当なところで車から降ろしてもら …

DQライバルズを中心に攻略しています。