2020年4月30日にリリースされた、WordPressバージョン5.4.1において、特定のパーマリンク設定の投稿が表示されなくなる現象が発生しました。今回はこの不具合の概要と対策方法について紹介します。
目次
WordPress 5.4.1で特定のパーマリンク設定の投稿が表示されない
2020年4月30日のWordPressのバージョンアップは、バージョン5.4からバージョン5.4.1へのマイナーアップデートでした。そのため多くのWordPressサイトでは、自動的に更新されてしまい、この不具合がなぜ発生したのか、わかりにくかったと思います。
具体的な不具合の内容ですが、
投稿ページにアクセスすると、投稿の詳細ページ(single.php)ではなくアーカイブページ(archive.php)が表示されてしまう
というものです。なぜこのような現象が発生してしまうのでしょうか。
投稿ページがアーカイブ判定されてしまう条件
WordPressバージョン5.4.1で投稿ページがアーカイブ判定されてしまう条件はズバリ、
パーマリンク設定に年・月・日・時・分・秒のパラメータしか使っていない
です。もう少し具体的に見てみましょう。まずWordPressの管理画面から、「設定」⇒「パーマリンク設定」を開きます。
ここでパーマリンクの共通設定が「カスタム構造」になっているか確認します。
上の画像で「ここをチェック」の部分が「年・月・日・時・分・秒」だけのパラメータで構成されている場合、投稿ページがアーカイブ判定されてしまいます。具体的にはこんな状態。
/%year%/%monthnum%/%day%/%hour%%minute%%second%/
私は上記の設定でパーマリンクを設定していました。このように設定していると、
https://domain/2020/05/01/123040/
このようなパーマリンクで投稿ページが表示されていました。しかしこれが投稿ページではなく、アーカイブページと判定されてしまうようになったのが、WordPressバージョン5.4.1です。
通常、WordPressの投稿は「single.php」というテンプレートファイルで表示されるのですが、それが「archive.php」というテンプレートで表示されてしまう状態です。
ちなみに、はてなブログからWordPressへ移行した人は、
/entry/%year%/%monthnum%/%day%/%hour%%minute%%second%
このように先頭に「/entry」とついているかもしれません。この場合も投稿ページがアーカイブ判定されてしまいます。
これでは検索エンジンから投稿ページに訪問した人にアーカイブ判定された投稿ページが表示されてしまいます。
2020年5月1日現在では、パーマリンクを維持したまま表示されるように修正するためには、WordPressをバージョン5.4.1からバージョン5.4にダウングレードするしかありません。しかしこれはプラグインを使えば、簡単にできるので、その方法を紹介します。
WordPressをバージョン5.4にダウングレードする方法
WordPressをバージョン5.4にダウングレードするには、プラグイン「WP Downgrade Specific Core Version」を使います。これはWordPressの公式プラグインなので、管理画面からインストールできます。
プラグインのインストールと有効化が済んだら、「設定」⇒「WP Downgrade」メニューをクリックします。
「WP Downgrade Options」が表示されます。
「WordPress Target Version」に「5.4」と入力して「Up-/Downgrade Core」ボタンをクリックします。
「WordPressの更新」画面に遷移します。ここで「再インストール」をクリックします。これでWordPressのバージョンが5.4にダウングレードします。
このような画面が表示されたら、ダウングレード成功です。
これで、これまでのパーマリンク設定でも投稿ページが表示されるようになります。
今後修正される見込みはあるか?
さて、WordPressバージョン5.4.1での修正ですが、これはバグではなく仕様と考えた方が良さそうです。
というのも、本来パーマリンクというのは他のページと重複しないユニークなものであるからです。
今回この不具合に遭遇した人は、パーマリンク設定に「年・月・日・時・分・秒」のパラメータしか使っていませんでした。つまり記事の投稿日時が同じ2つ以上の記事が存在した場合、このパーマリンク設定では、どの記事を表示したら良いのかわからなくなってしまいます。このような投稿は、予約投稿機能を使うと簡単に作れてしまいます。
このような事態を防ぐために、WordPressのドキュメントでは、パーマリンク設定に「post_id」か「postname」を使用することを要求しています。「post_id」はWordPressが投稿をシステムで管理するためのユニークなIDであり、「postname」は投稿につけられたユニークな文字列だからです。
というわけで、どうやら今回のパーマリンク設定の処理の変更が元に修正される可能性は低そうです。
この機にユニークなパーマリンク設定にした方が良い
仕方がないので、私はこの機会にパーマリンク設定を見直して確実にユニークになるように設定を変更しました。
これまで
/%year%/%monthnum%/%day%/%hour%%minute%%second%/
これから
/%year%/%monthnum%/%day%/%hour%%minute%%second%/%post_id%/
パーマリンクの末尾に記事IDの「%post_id%/」を追加しただけです。
これでWordPressのバージョンを最新に維持した状態で、投稿ページが正常に表示されます。パーマリンクは変わってしまいましたが・・・
本来ならば、旧パーマリンクにアクセスされたときに新パーマリンクへの301リダイレクト処理を追加するのがベストです。もうここまでの作業で疲れてしまったので、今日はここまでということで。
リダイレクト処理が簡単にできる方法がわかったら、また後日ブログで紹介します。
【2020年5月11日追記】
今回の修正について、詳しい人のお話を以下のURLで確認できます。
こんにちは。
WPのパーマリンク、変な表示になることがありましたので、助かりました。
また、簡単にできる方法がありましたら教えてください。
どんぴしゃの内容で困っていました。
非常に助かりました!ありがとうございます!