今回は「テーマの最新版が入手できない状態でPHPを8.3に更新したら、エラーでサイトが真っ白になった」というご相談をいただきました。 調査の結果、テーマ内のウィジェット関連ファイルに古いコードが残っており、PHP8系では動かないのが原因でした。
デバッグによる原因特定
まず wp-config.php
に以下を追記し、デバッグログを有効化しました。
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
すると wp-content/debug.log
にエラーログが出力され、どのファイル・何行目でエラーが発生しているかが判明しました。
今回は functions/widget/recent_post.php
など複数のウィジェットファイルが原因でした。
修復事例:ウィジェットクラス
古いテーマでは、ウィジェットのコンストラクタで $this->WP_Widget()
を使っていました。これはPHP8では非推奨となり、エラーの原因になります。
修正前(エラーが出るコード)
class tcd_recent_post_widget extends WP_Widget {
function __construct() {
$widget_ops = array('classname' => 'tcd_recent_post_widget', 'description' => __('最近の投稿を表示するウィジェット。', 'tcd-w'));
$this->WP_Widget('tcd_recent_post_widget', __('最近の投稿 (TCD)', 'tcd-w'), $widget_ops);
}
}
修正後(PHP8対応済みコード)
class tcd_recent_post_widget extends WP_Widget {
function __construct() {
$widget_ops = array('classname' => 'tcd_recent_post_widget', 'description' => __('最近の投稿を表示するウィジェット。', 'tcd-w'));
parent::__construct('tcd_recent_post_widget', __('最近の投稿 (TCD)', 'tcd-w'), $widget_ops);
}
}
このように $this->WP_Widget()
を parent::__construct()
に書き換えることで、PHP8でも正常に動作するようになります。
修復事例:ウィジェット登録
さらに、create_function()
を使ったウィジェット登録処理も、PHP7.2以降では廃止されています。
修正前
add_action('widgets_init', create_function('', 'return register_widget("tcd_recent_post_widget");'));
修正後
add_action('widgets_init', function() {
register_widget('tcd_recent_post_widget');
});
この修正により、テーマは最新のPHPでも問題なく動作するようになりました。
まとめ
今回は「ウィジェットクラスとウィジェット登録の古い書き方」が原因でしたが、テーマやバージョンによってエラーの出る箇所は異なります。 大切なのは、wp-configでデバッグを有効化 → エラーログで原因を特定 → 該当箇所を最新のPHP仕様に合わせて修正 という手順です。
テーマのバージョンアップができない状況でも、このようにコードを修正すれば引き続き利用可能です。
テーマ更新やPHPバージョンアップでエラーが出てしまった方へ
今回のように原因を特定してコードを修復すれば、サイトは復旧できます。 「最新版テーマが手元にない」「どこを直せばいいか分からない」 といった場合でも、ぜひご相談ください。 WordPress救急隊が迅速に対応いたします。
電話でのご相談は TEL: 050-3092-1700(365日年中無休、9時~21時)で受け付けております。
詳しいお問い合わせは以下のメールフォームからどうぞ。