『デフォルトで動的なプロパティの追加が非推奨』を解決する
| 2024/06/18当サイトでも使用しているWPのプラグインに不具合続出
PHP8以降になり、新機能が増えたのはいいんだが、不具合も非常に増えている。
まずデフォルトのエラーレポートレベルが変更されて、より多くのエラーや警告が表示されるようになったそうだ。
私はいつもdefine( 'WP_DEBUG', true )に設定しているので大量のエラーに脳みそを突っつきまくられている。
特に、custom field suite、All-in-One WP Migration、MW WP Formにエラーが大量に吐き出されている。
特に不良動作が起きているわけではないが、やはり対処する必要がありそうだ。
それではひとつ目Custom Field Suite。
管理画面で次の様なエラーが”Deprecated: Creation of dynamic property Custom_Field_Suite::$group_ids is deprecated in ~”
CatGPTで調べるとエラーの内容は「PHP 8.2では、デフォルトで動的なプロパティCustom_Field_Suiteの追加が非推奨(Deprecated)になっています。」ということらしい。
さらに調べると、PHP 8.2で新たに導入された属性(アノテーション)で「#[AllowDynamicProperties]というものがあり、クラスに対して動的なプロパティの追加を許可するものだそうだ。「この属性を使用することで、特定のクラスに対してその制約を緩和することができます。」とある。
その修正方法は?
CatGPTに聞いてみた。
つまり、8.2未満では下記で問題なかったコードが8.2以降ではエラーなるため
<?php
class MyClass {
public $existingProperty;
}下記のように修正する必要があるそうだ。
<?php
#[AllowDynamicProperties]
class MyClass {
public $existingProperty;
}1行追加するだけだ
では対象のコードはどこにあるか
修正方法はわかったが、肝心のcustom field suiteの動的プロパティCustom_Field_Suiteはどこにあるんだ?
調べるとあった。cfs.phpの最上段に記述されている。なので次の様に修正することでエラーを無くせた。
<?php
#[AllowDynamicProperties]
class Custom_Field_Suite
{やることは簡単だがこの解決方法を見つけるのには、ほんとかなり苦労した。
残りのプラグインエラーの解消方法は次回で解説する。

おまけ
フィールドグループの編集画面でもエラーがでた。
修正方法は上と同じだ。
今後のことを考えると、アトリビュートによる一過性の修正ではなく根本的な解決を適用したい
動的プロパティをなくす
これまで行ってきた#[AllowDynamicProperties] による修正は、動的プロパティを使用するレガシーコードを動作させるための一時的な手段。つまり、 今後PHP9などになると、必ず修正する必要が出てくると思われる。
したがって、 #[AllowDynamicProperties] を使用することは、コードのモダナイゼーションの過程における一時的な対策と見なすべき。長期的には、コードベースを改善し、動的プロパティを使用しないようにすることが望ましい。
そのためには動的プロパティを見つけて読み込み元のクラスへプロパティとして定義することが問題解決へとなる。
まず、警告文をみる。

動的プロパティをクラスのプロパティとして定義する
ここでは$group_idsが動的プロパティとありadmin_head.phpで使われているとある。
admin_head.phpの指示場所をみるとたしかに$group_idsが使われている。
なので大元のクラスclass Custom_Field_Suiteへプロパティとして定義する。
以上で修正完了。あとはエラーの数だけ同じことをやればよい。
これでPHPのバージョンが上がっても安心だ。


- AllowDynamicProperties
- CatGPT
- Custom_Field_Suits
- Deprecated: Creation of dynamic property
- PHP8.2以降
- WEB開発
- フィールドグループの編集画面
- 不具合対応
- WEBの回復屋さん
『wordpress.PHP8の不具合をCatGPTが怪傑』関連のお薦め
初めてならサービスしとくわ
Nullを引数へ渡せない問題をCatGPTが怪傑
WEBタロットでちょっと息抜き
GA4でユーザー動向を詳しく調べる
メモリよ飛び放て!
ミルクティーとTransform Rotateは順番が肝心
MW‐WPFORM確認画面へ移動しない悩み解決
wordpressPHP8の不具合をCatGPTが怪傑
ページャーを複数設置。
レイヤーの重なりを制御する
汝は神なり?
PHP8以降の警告文戻り値の型チェックが厳格にへ対応する
週間人気ランキングを実装
Information End
このサイトで紹介しているコード、プログラムなどは個人の学習目的で作成されたものであり、いかなる保証も行いません。
利用はすべて自己責任でお願いします。
ただし、このページで紹介しているプログラムやビジュアルなどはご依頼いただければ実装を賜ります。
お問い合わせはこちら