PHP7.4のセキュリティリリースが終了してもう1年以上経っています。本来ならば8.1以上を利用するのが望ましいのですが、なかなかPHPの更新まで手が回らないでいるというサイトも少なく有りません。
今回はPHP7.4までは問題なかったものの、8.0以上に更新した際にWordPressのループ箇所から以降が一切表示されず、エラーメッセージも表示されなくなってしまった場合の原因と解決策についてです。
なお、PHPの更新作業はバックアップを作成した上で、本番環境ではないテスト環境や開発環境で実施し、確認後に本番環境で実施することを推奨します。
目次
PHP 8.0に更新するとループ以降が一切表示されないエラーが発生
WordPress のループによってお知らせ的なコンテンツを表示していた箇所がありました。イメージとしては以下です。
最新順に記事が並んでいるよくあるようなループです。
PHP を8.0に更新したところ、今まで表示されていたWordPressのループ箇所とループ以降のコンテンツが表示されなくなってしまうエラーが発生しました。
さらに、デバッグモードを有効化しているにも関わらず、エラーメッセージが画面にもログにも表示されていませんでした。
PHP 7.4に戻し、デバッグモードを有効化して確認する
ループが表示される以前のPHP 7.4に戻します。この状態で、WordPress のデバッグモードを有効化して確認します。(wp-config.php 内のWP_DEBUG
をtrue
に設定)
参考: テスト環境や開発環境を用意したら有効化しておきたいデバッグモード
確認すると、警告エラーのメッセージが表示されました。さらに、将来のPHPでエラーとなるとも書いてあります。
Warning: Use of undefined constant data_category - assumed 'data_category' (this will throw an Error in a future version of PHP) in /path-to-wordpress/wp-content/themes/name/archive.php on line 60
このエラーメッセージは、PHPコードにおいて定義されていない定数 data_category
がコード内で使用されているものの、適切に定義されていないことを示しています。
場所はarchive.php ファイルの60行目です。該当ファイルを見てみましょう。
波括弧を使った配列や文字列のオフセットへのアクセスは7.4から非推奨となった
該当ファイルのコード内で ${data_category}
という記述が使われていました。この記述はPHP 7.4以降非推奨になったと公式に記載があります。
波括弧を使って配列や文字列のオフセットにアクセスする文法は推奨されません。
PHP: PHP 7.4.x で推奨されなくなる機能 – Manual$var{$idx}
でなはく$var[$idx]
を使って下さい。
よって、ファイル内の波括弧である {
と }
を削除します。 ${data_category}
から $data_category
に変更します。これにより無事解決。エラーメッセージは消え、WordPressのループや以降のコンテンツも正しく表示されました。
PHPの更新は定期的に行うのが安全
ちなみに、8.0のリリースノートにはこの件について書かれているか確認してみましたが、見つけることはできませんでした。8.0に更新すると非表示になるということは、7.4で非推奨、8.0で完全に削除された、と考えていいと思います。
今日現在、安全に利用できるPHPのバージョンは8.1以降です。8.1も2024年11月にセキュリティサポートが終了予定なので、できれば8.2以降を利用するのが安全です。
しかし、レンタルサーバーによっては最新のPHPが8.1というところもあります。その場合はレンタルサーバー側で利用できるようになってから更新しましょう。
冒頭でも書きましたが、PHPの更新は必ずテスト環境で実施しましょう。今回のようにエラーが発生したら対応してから、本番環境に対応したファイルを反映してPHPを更新します。これにより、安全な更新作業となります。
コメントを残す