WordPress6.4リリースにより正式にWordpressコアでPHP8がサポートされました。これにより、今後PHP8への移行が一気に進むと予想されます。
少し前まで、PHP8にすることで得られるメリットとデメリットを考えた時に、PHP8にして得られるメリットよりも、プラグインなどのPHP8非対応によるワーニングなどの影響のデメリットの方が大きいと思っていました。
もともとWordpressコアがPHP8に正式対応するまでは様子を見ようと思っていたのが一番の理由かもしれません。
しかし、PHP8に対応してしまったものは仕方ないので、自分のサイトをPHP8に変更し、問題が起きれば対処していくことにしました。
私が使っているサーバーのPHP8のバージョンはPHP8.2でした。
PHP8.2に上げたら、Creation of dynamic property XXXX is deprecatedという非推奨のメッセージが出るようになりましたので、この記事で対応方法をまとめておきます。
保守されているテーマはPHP8対応済み
WordPress公式テーマや、有料テーマで現在も保守されているテーマを使っている場合、バージョンアップすればPHP8への対応は完了します。
問題が起きるとすれば、子テーマでカスタマイズした自分のコードぐらいでしょう。
保守されていないプラグインがPHP8で警告や非推奨を吐く
更新されていないプラグインでも便利なものは長く使われているものが多いです。
更新されていないプラグインはPHP8に変更すると、警告や非推奨の記述があると出てきます。
よく出てくるのが、
Creation of dynamic property XXXX is deprecated
というメッセージです。
画面が真っ白にならなければ、基本大きな問題ではないのですが、ログに記録されるのでログファイルが肥大化する問題はあるでしょう。
Creation of dynamic property XXXX is deprecatedとは?
Creation of dynamic property XXXX is deprecatedというのは、classのプロパティとして宣言されていないものにアクセスしようとしている時に出てきます。
記述としては問題なくても、バグを作りこみやすいから避けた方がよいという非推奨項目です。
バグじゃないなら大きなお世話ですので、記述を治すよりもメッセージが出ないようにする方が話が早いです。
こういう時に非推奨のメッセージが出ます
class DefaultBehaviour { }
$o1 = new DefaultBehaviour();
$o1->nonExistingProp = true;
#[\AllowDynamicProperties]を追加すれば非推奨のメッセージが出なくなります。
#[\AllowDynamicProperties]
class ClassAllowsDynamicProperties { }
$o2 = new ClassAllowsDynamicProperties();
$o2->nonExistingProp = true;
SNS Count cacheプラグインは非推奨メッセージが結構でる
SNS count cacheは利用者数が多いプラグインの一つですが、PHP8.2にすると非推奨項目である、Creation of dynamic property XXXX is deprecatedが11個出ました。
ソースファイルのclassの前に、お呪いを追加すれば消えますが、そのうち更新されるのではないか?と期待してます。
PHPのエラーレポートのオプション
PHPのエラー表示設定は細かく出力制御できる。通常、非推奨項目はレポートされないと思われます。
まとめ
Creation of dynamic property XXXX is deprecatedが保守されていないプラグインやテーマから出てしまった時には、#[\AllowDynamicProperties]をclassの直前に追加します。
それだけですべて解決します。
コードの修正が少なく一番安全な方法だと思います。