WordPress

【WordPress】バージョン5.4.1においてパーマリンクの設定により投稿ページが表示されない不具合が発生

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 Specific Core Version

プラグインのインストールと有効化が済んだら、「設定」⇒「WP Downgrade」メニューをクリックします。

WP Downgrade

「WP Downgrade Options」が表示されます。

WP Downgrade Options

「WordPress Target Version」に「5.4」と入力して「Up-/Downgrade Core」ボタンをクリックします。

WordPressの更新

「WordPressの更新」画面に遷移します。ここで「再インストール」をクリックします。これでWordPressのバージョンが5.4にダウングレードします。

WordPress 5.4にダウングレード成功

このような画面が表示されたら、ダウングレード成功です。

これで、これまでのパーマリンク設定でも投稿ページが表示されるようになります。

今後修正される見込みはあるか?

さて、WordPressバージョン5.4.1での修正ですが、これはバグではなく仕様と考えた方が良さそうです

というのも、本来パーマリンクというのは他のページと重複しないユニークなものであるからです。

今回この不具合に遭遇した人は、パーマリンク設定に「年・月・日・時・分・秒」のパラメータしか使っていませんでした。つまり記事の投稿日時が同じ2つ以上の記事が存在した場合、このパーマリンク設定では、どの記事を表示したら良いのかわからなくなってしまいます。このような投稿は、予約投稿機能を使うと簡単に作れてしまいます。

このような事態を防ぐために、WordPressのドキュメントでは、パーマリンク設定に「post_id」か「postname」を使用することを要求しています。「post_id」はWordPressが投稿をシステムで管理するためのユニークなIDであり、「postname」は投稿につけられたユニークな文字列だからです。

WordPressのパーマリンク設定

というわけで、どうやら今回のパーマリンク設定の処理の変更が元に修正される可能性は低そうです。

この機にユニークなパーマリンク設定にした方が良い

仕方がないので、私はこの機会にパーマリンク設定を見直して確実にユニークになるように設定を変更しました。

これまで
/%year%/%monthnum%/%day%/%hour%%minute%%second%/

これから
/%year%/%monthnum%/%day%/%hour%%minute%%second%/%post_id%/

パーマリンクの末尾に記事IDの「%post_id%/」を追加しただけです。

これでWordPressのバージョンを最新に維持した状態で、投稿ページが正常に表示されます。パーマリンクは変わってしまいましたが・・・

本来ならば、旧パーマリンクにアクセスされたときに新パーマリンクへの301リダイレクト処理を追加するのがベストです。もうここまでの作業で疲れてしまったので、今日はここまでということで。

リダイレクト処理が簡単にできる方法がわかったら、また後日ブログで紹介します。

【2020年5月1日追記】
以下で紹介するブログで、WordPressのダウングレード以外の方法で不具合を解決する方法が紹介されています。

上記ブログで紹介されている方法は、

  • プラグインによるリダイレクト
  • 各記事のスラッグを変更する
  • functions.phpの修正

それとWordPressのダウングレードです。

どうしてもパーマリンク設定をそのままにしたい人は、試してみてはいかがでしょうか。

そもそもWordPressの自動更新機能を無効化したい人は、以下の記事をご覧ください。

【WordPress】本体やプラグインの自動更新を停止する方法WordPressには本体を自動的にアップデートする機能がデフォルトで有効になっています。しかし本体のアップデートにより、WordPre...

【2020年5月11日追記】
今回の修正について、詳しい人のお話を以下のURLで確認できます。

ABOUT ME
アバター
ドレッド
目標必達のために鬼努力を惜しまない個人事業主。記事執筆・ホームページ制作・メディア運営・コンサルティングのお仕事をしています。立命館大学中退。放送大学教養学部の全科履修生。中小企業診断士とFP1級を目指してハードに勉強中。

POSTED COMMENT

  1. アバター 上村ユウ より:

    こんにちは。
    WPのパーマリンク、変な表示になることがありましたので、助かりました。
    また、簡単にできる方法がありましたら教えてください。

  2. アバター Jelly より:

    どんぴしゃの内容で困っていました。
    非常に助かりました!ありがとうございます!

COMMENT

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

CAPTCHA