WordPressでは、バージョン6.3から、PHP8に対応しています。(6.2まではPHP8はベータサポートでした。)このため基本的にはPHP8で動作します。str_contains()関数 のようなPHP8で導入された関数も利用できます。 ただし、PHPに未対応のままのコードが残っている可能性はあるかもしれません。
テーマやプラグインについても、PHP8対応が推奨されています。ただし、まだ対応していないテーマやプラグインもあるようです。
PHP5→PHP7よりも、PHP7→PHP8のほうがコード変更の手間は多くなるケースが多いようです。
なので、当面の間は、テスト環境で確認する必要がありそうです。
PHP8での変更点
現実的に大きな影響は
- エラー基準が厳しくなる(今までNoticeだったものがWarningになる)
- エラーを全て報告する
だと思われます。
エラー基準が厳しくなる
例えば、
<?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.txt の Tested up to: の記述で6.3以降になっているか』が目安になりそうです。
PHPのサポート期限は
詳細はPHPのサポート期限に掲載していますが、2024年10月時点ではPHP8.1以降がセキュリティサポート対象です。
更新日: