ブログ

WordPressPHPのバージョンアップでエラー発生|コード修復対応事例

今回は「テーマの最新版が入手できない状態で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時)で受け付けております。
詳しいお問い合わせは以下のメールフォームからどうぞ。

お問い合わせはこちら

関連記事

ページ上部へ戻る