WordPress-このサイトで重大なエラーが発生しました。

WordPressを使っていて、PHP8にしたらこのサイトで重大なエラーが発生しました。とでました。このときの対処法となります
サーバー環境
- WordPRess:5.9
- テーマ:オリジナル
- PHP:7.4.13(既存環境)
- PHP:8.0.3(新環境)
- 切り替え方法:phpenv使用
状況
- PHP7.4.13の状態では問題なく表示されている
- PHP8.0.3に切り替えると500エラーとなる
- WordPressにはこのサイトで重大なエラーが発生しました。 とだけでる
こんな感じです。プラグインを変えたりなにもしてません。
このサイトで重大なエラーが発生しました
WordPRessではこのような表記になりますが、実際には500エラーとなります。サーバー側の問題となります
サーバー側の問題ではなくPHP
500エラーだけではわからないので、WordPressのデバッグモードをオンにします
wp-config.phpファイルを編集してデバッグモードをtrueにします
[php]
/**
* 開発者へ: WordPress デバッグモード
*
* この値を true にすると、開発中に注意 (notice) を表示します。
* テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
*
* その他のデバッグに利用できる定数についてはドキュメンテーションをご覧ください。
*
* @link https://ja.wordpress.org/support/article/debugging-in-wordpress/
*/
define( 'WP_DEBUG', true ); //falseになっているのでtrueにする
[/php]
これでデバッグモードとなり、エラー文が表示されるようになります。
エラー文
エラー文がでたらこんなエラーでした
[php]
Fatal error: Uncaught Error: call_user_func_array(): Argument #1 ($callback) must be a valid callback, function "my_css_attributes_filter" not found or invalid function name
[/php]
エラー内容としては、関数が見つからない or 関数名が無効だよ って内容です
該当箇所
この関数を使っている箇所を調べてみました
[php]
//カスタムメニューのliのid,classを削除
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
[/php]
ありました。WordPressのカスタムメニューのIDとクラスを削除するときに使ってました
コメントアウトしてみる
とりあえずエラー箇所をコメントアウトしてみます
[php]
//カスタムメニューのliのid,classを削除
/*
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
*/
[/php]
問題なく表示されました。僕の場合はこれが原因でした。
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS