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

WordPressを使っていて、PHP8にしたらこのサイトで重大なエラーが発生しました。とでました。このときの対処法となります

サーバー環境

  • WordPRess:5.9
  • テーマ:オリジナル
  • PHP:7.4.13(既存環境)
  • PHP:8.0.3(新環境)
  • 切り替え方法:phpenv使用

状況

  1. PHP7.4.13の状態では問題なく表示されている
  2. PHP8.0.3に切り替えると500エラーとなる
  3. WordPressにはこのサイトで重大なエラーが発生しました。 とだけでる

こんな感じです。プラグインを変えたりなにもしてません。

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

WordPRessではこのような表記になりますが、実際には500エラーとなります。サーバー側の問題となります

サーバー側の問題ではなくPHP

500エラーだけではわからないので、WordPressのデバッグモードをオンにします

wp-config.phpファイルを編集してデバッグモードをtrueにします

/**
 * 開発者へ: WordPress デバッグモード
 *
 * この値を true にすると、開発中に注意 (notice) を表示します。
 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
 *
 * その他のデバッグに利用できる定数についてはドキュメンテーションをご覧ください。
 *
 * @link https://ja.wordpress.org/support/article/debugging-in-wordpress/
 */
define( 'WP_DEBUG', true ); //falseになっているのでtrueにする

これでデバッグモードとなり、エラー文が表示されるようになります。

エラー文

エラー文がでたらこんなエラーでした

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

エラー内容としては、関数が見つからない or 関数名が無効だよ って内容です

該当箇所

この関数を使っている箇所を調べてみました

//カスタムメニューの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);

ありました。WordPressのカスタムメニューのIDとクラスを削除するときに使ってました

コメントアウトしてみる

とりあえずエラー箇所をコメントアウトしてみます

//カスタムメニューの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);
*/

問題なく表示されました。僕の場合はこれが原因でした。

個人支援・寄付について

サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。

  • ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS