一通りの修正を行い、無事 PHP8.2 で動作するようになった と思ったのですが、なぜか今日になって再びエラーが出て動かなくなってしまいました。
ひとまず、エラーを確認して PHP7.4 へ戻して復旧。さてどうしたものか。
— 2025/7/10 プラグイン側の修正で解決しました
エラーの内容は
Fatal error: Uncaught ArgumentCountError: Too few arguments to function WP_Widget::__construct(), 0 passed in ...... and at least 2 expected in /******/wp-includes/class-wp-widget.php:163 Stack trace: #0 /******/wp-includes/class-wp-widget-factory.php(62): WP_Widget->__construct() #1 /******/wp-includes/widgets.php(123): WP_Widget_Factory->register('******...') : : #15 {main} thrown in /******/wp-includes/class-wp-widget.php on line 163 There has been a critical error on this website.
といったもので、古いプラグインで Widgit の登録を行う部分の記述がお作法に反しているらしいのだけれど...
ってこれ最初に https://wordpress.stackexchange.com/ で仕入れた情報をもとに修正したやつでした。
どうやら、昨晩 Wordperssが 6.6.1 に自動更新された際に、対象のファイルが書き戻されてしまったことが原因ようです。
該当の箇所は /******/wp-includes/class-wp-widget-factory.php で
62行目
$this->widgets[ $widget ] = new $widget();
を
$this->widgets[ $widget ] = new $widget($widget, $widget);
のように書き直せばOK
ただ、今のところ PHP8.x はベータサポート扱いらしいので、7.4 のままの方が無難かも。
ここまでで一通りの 8.x 対応も済ませた & 修正すべき箇所のメモも残せたので、8.xに正式対応されるまでは、 更新のたびにファイルを書き戻されて動かなくなってしまっても困るので、7.4へ戻しておこうと思います。
こんにちは。
wordpressのPHPを8.3に上げたら「重大なエラーが発生」になってしまいました。
デバッグモードで出てきたプラグインを削除しても変わらず。
こちらの指示に従ってphpを修正したら見事に動きました。
ありがとうございます!神です。
このわたさん
wp-includes/class-wp-widget-factory.php
の修正の場合、暫定処置で WPのアップデートをすると書き戻されてしまうので、
https://www.maconey.info/adagio/2025/07/10/26726/
の修正も併せてお試しを
ご返事ありがとうございます。
デバッグして原因となっているお作法に反しているプラグインを突き止めて修正したいと思います。
それまではwordpressのバージョンアップのたびにclass-wp-widget-factory.phpを修正します