掲示板書庫の載っているconsadeconsa.comのPHPヴァージョンを、PHP 7.4.33からPHP 8.0.25にアップデートしたら、サイトが落ちてしまいました。
PHPは8.2まで登場していて、PHP 7.4はすでにサポートを外されているので、現状安定版とされているPHP 8.0へのアップデートを遅ればせながらこころみましたが、何かが悪いようです。
【状況】
- WordPress 6.3.1
- テーマ:Twenty Fourteen 3.7
- プラグイン:いろいろ
【症状】
- PHP 7.4.33:問題なしに稼働
- PHP 8.0.25に変更したら:サイトが落ちた。「このサイトで重大なエラーが発生しました。」と表示され、サイトが表示されず。ログイン画面でも同様で、管理画面にログインできず。
- PHP7.4.33に戻したら:問題なしに稼働
【原因の追求】
テーマかプラグインが、PHP 8.0に対応していない可能性あり。なので色々調べてみる。
ログブックのサイトでも同じような症状が起きていたので、原因はプラグインと考えて、原因を探してみた。
- 23/08/26:ログブックのPHP 7.4をPHP 8.0にアップデートしたら落ちた – ログブック
プラグインに目星をつけて、オンオフを繰り返してみても、原因が判明しない。すべてオフでもエラーが出続けることから、プラグインは原因ではないと判断。
となると、テーマが怪しい。しかしながら、使用しているTwenty Fourteen テーマは、Wordpressのデフォルトテーマの一つでもあるし、定期的にアップデートされているので、原因とは考えにくい。実際、ログブックなどでは問題なく動いている。
掲示板書庫に限らず、コンサデコンサ、ログブックのサイトでは、テーマに子テーマを使用している。テーマのバージョンがアップデートするたびにカスタマイズした内容を書き直したりするのが面倒くさいので使用しているものだが、記述者が管理人(自分)なので、ミスがあるとしたら一番怪しい。
子テーマをオフにしてみる。すると、「このサイトで重大なエラーが発生しました。」の表示が消えた。
原因が子テーマにあることが判明したので、原因をさらに絞り込む。子テーマ内のファイルを色々確認した結果、function.php ファイルが原因であることが判明。記述内容のチェックを引き続き行う。すると、一部の記述に文法ミスが有ることが判明。
以下の部分がエラーの原因だった。
/**
* 検索結果を日付順にする
*/
add_filter('posts_search_orderby', custom_posts_search_orderby);
function custom_posts_search_orderby() {
return ' post_date desc ';
}
「custom_posts_search_orderby」の部分が”でしっかり区切られていない。正しい表記は以下の通り。
/**
* 検索結果を日付順にする
*/
add_filter('posts_search_orderby', 'custom_posts_search_orderby');
function custom_posts_search_orderby() {
return ' post_date desc ';
}
PHP 7.4では、文法ミスの記述でも、通してくれていたんですね。
【対応】
子テーマのfunction.php ファイルに記述していた文法ミスを訂正。
以上で、PHP 8.0でも問題なく動くようになった。