PHP8にすると保守されていない古いプラグインは色んなエラー(Warning含む)を吐くようになります。
特にレンタルサーバーがPHP8を標準にしているところが増えてきましたので、知らないうちにPHP8を使っている人も多いのではないかと思います。
とあるSWELLというテーマでPHP8を使ったサイトがあったのですが、カスタマイザーを開くと真っ白になって何も表示されなくなりました。
たまたま、検証ツールでPHPのエラーを確認できたので、直ぐに原因はわかったのですが、修正方法と合わせてメモしておきたいと思います。
Warning: Attempt to read property “ID” on null in というメッセージが出ていた
検証ツールを開くと、Uncaught SyntaxError: Unexpected token ‘<‘と表示されていました。
customize.phpの出力にゴミが載ってるわけです。
その原因は、別にありました。
Warning: Attempt to read property “ID” on null inというメッセージが混じっており、そのエラーメッセージが検証ツールがエラーになっている直接の原因でした。
では、そのWarningはなぜ出ているのか?というと、プラグインのファイルの中で出ていました。
問題が起きたのは、Avator Managerというプラグイン
Avator Managerというプラグインがあります。

- バージョン:1.6.1
- 最終更新日:3年前
- 有効インストール数:9,000+
- WordPress バージョン:3.5またはそれ以降
- 検証済み最新バージョン:5.6.12
プラグインは対応するPHPのバージョンの表記が無いので、最終更新日と検証済みのWordpressバージョンの確認が重要です。
$post->IDという部分が問題箇所
プラグインファイルの中で、$post->IDを参照しているのですが、カスタマイザーを表示している時は$postがnullになるようです。
nullであっても、PHP7では問題ないのですが、PHP8から問題になります。
$postがnullの場合は、$post->IDを参照しないように修正すればいいわけです。
参考:https://worklog.be/archives/4734
修正方法
$postがnullであるか判定するif文を追加しました。
/**
* Displays media states for avatar images.
*
* @uses get_post_meta() For retrieving attachment meta fields.
* @uses __() For retrieving the translated string from the translate().
* @uses apply_filters() For calling the functions added to a filter hook.
*
* @since Avatar Manager 1.2.0
*
* @param array $media_states An associative array with media states.
* @return array An associative array with media states.
*/
function avatar_manager_display_media_states( $media_states ) {
global $post;
if ( !is_null( $post ) ) {//追加
// Retrieves attachment meta field based on attachment ID.
$meta_avatar = get_post_meta( $post->ID, '_avatar_manager_is_custom_avatar', true );
}//追加
if ( ! empty( $meta_avatar ) )
$media_states[] = __( 'Avatar Image', 'avatar-manager' );
// Calls the functions added to avatar_manager_display_media_states filter
// hook.
return apply_filters( 'avatar_manager_display_media_states', $media_states );
}
add_filter( 'display_media_states', 'avatar_manager_display_media_states', 10, 1 );
まとめ
PHP8にしたつもりはないのに、勝手にPHP8になっていることもありますので、なんか変だな?と思ったらサーバーのコンパネでPHPのバージョンを確認してPHP8だったらPHP7.4にしてみることをお奨めします。