このサイトではアフィリエイト広告を利用しています。

WordPressのPHP8への対応

WordPressでは、バージョン6.3から、PHP8に対応しています。(6.2まではPHP8はベータサポートでした。)このため基本的にはPHP8で動作します。str_contains()関数 のようなPHP8で導入された関数も利用できます。 ただし、PHPに未対応のままのコードが残っている可能性はあるかもしれません。

テーマやプラグインについても、PHP8対応が推奨されています。ただし、まだ対応していないテーマやプラグインもあるようです。

PHP5→PHP7よりも、PHP7→PHP8のほうがコード変更の手間は多くなるケースが多いようです。

なので、当面の間は、テスト環境で確認する必要がありそうです。

PHP8での変更点

現実的に大きな影響は

  1. エラー基準が厳しくなる(今までNoticeだったものがWarningになる)
  2. エラーを全て報告する

だと思われます。

エラー基準が厳しくなる

例えば、

<?php
echo esc_html( $description );
?>

のようにコードを書いていたとします。

$description が未定義の場合、「Undefined Variable(定義されていない変数)となりますが、PHPのバージョンにより、扱い(どの水準のエラーとするか?)が異なります。PHP7までだと、Notice(注意)ですが、PHP8からはWarning(警告)になります。またPHP9では致命的エラーになる予定です。

このため、isset() などを用いて、定義されているかを確認してから使うことが推奨されます。

<?php
if (isset( $description )) {
    echo esc_html( $description );
}
?>

エラーを全て報告する

PHP7.4までは、デフォルト設定の場合にNotice と Deprecated を実行時のエラーとして報告しませんでした。 一方PHP8からは、全てのエラーが報告されます。

このため、PHP8にアップデートすると、プログラム自体が動作する場合でも、画面上に「Deprecated: …」といったエラーが表示されることがあります。

エラーメッセージにはエラーの発生している箇所(ファイルと行数)が表示されるので、コードを修正してエラーが出ないように変更する必要があります。

暫定的な対処法としては、php.ini

// エラー報告を変更する。※あくまで暫定的な対処法。コードを修正するのが本来好ましい※
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE

のように設定して、PHP7.4以前のデフォルト設定に合わせる(Notice と Deprecated を実行時のエラーとして報告しない)方法があります。

なおこれは、あくまで暫定的な対処法です。コードを修正するのが本来好ましいです。

なお、WordPressでは、wp-load.php で以下のような記述があります。

		error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );

wp-load.php の読み込みまで進んだ後であれば、Notice と Deprecated は報告されません。

テーマ・プラグインのPHP8対応は

テーマ・プラグインは、それぞれ対応するPHPバージョンが異なります。PHPのバージョンが古いほうは、テーマ・プラグインの readme.txt に、 Requires PHP: という記述があるので確認できます。

なので、PHP8対応しているかどうかを直接判断するのは難しいですね。間接的にはWordPress本体がバージョン6.3からPHP8対応していることから、『 readme.txtTested up to: の記述で6.3以降になっているか』が目安になりそうです。

PHPのサポート期限は

詳細はPHPのサポート期限に掲載していますが、2024年1月時点ではPHP8.1以降がセキュリティサポート対象です。

更新日:

↑このページへのリンク