web-dev-qa-db-ja.com

WP_WidgetはWordpress V4.3で廃止予定のエラーです

私は私のワードプレスサイトをバージョン4.3にアップデートしたので、このエラーは今朝起きただけです。同じホスティング上の他の2つのサイト(およびすべてホスティングの管理ポータルとしてCPanelを使用している)では問題はありません。この1つの問題のあるサイトcompany.comでは、wordpressの管理者ポータルと実際のサイトでは、ページの上部に何度か繰り返すエラーがあります。

The error continues down the page like this 9 times. 

The error page is then finished off with this error/line. 

私は今日これを読みました、そしてそれはおそらく同じサーバー上の他のWPサイトに関する問題はありませんが、PHP4からPHP5へのアップグレードに関係しています。私はまたテストするためにサイトのすべてのプラグインを無効にしました、そして問題はまだそこにありました。バックアップからの復元には間に合わず(これは簡単ではなく、独自のエラーを引き起こす可能性があります)、今日/最近この問題を抱えている人はいますか?

それが最後にカットオフされる前にエラーメッセージが解決策自体を示唆しているように見えることは助けにはなりません。

エラーメッセージは "company/public_html/wp-includes/..."で始まります。2行目は "WP_Widgetのコンストラクタメソッドはバージョン4.3.0以降では非推奨です。

バージョン4.3は、WPが今日に更新されたバージョンです。それは一見このエラーを引き起こしているようですが、私はそれを修正する方法がわかりません。

これに答えるために必要な他の情報は私が提供すること以上に幸せになるでしょう。

2
MuccyCork

エラーは実際にはPHPバージョンによって引き起こされるわけではありません(PHP 4のコンストラクタはPHP 7まで削除されません) - これは準備のためにWordPressによって生成される警告です。エラーが繰り返されるたびに、古いコードを使用したプラグインが表されます。

プラグインの作者がそれらを更新するまでは、Linuxシステムで次のシェルコマンドを実行して古いコンストラクタ呼び出しを見つけることができます。

grep -R "WP_Widget\(" /path/to/your/wp/install

これはあなたがコマンドラインで変更することができるか、またはWPのプラグインエディタを使用することができるファイルのリストをあなたに与えるでしょう。一致した文字列 - ほとんどのparent::WP_Widget(args)parent::__construct(args)に変更されるべきです。

4
tjbp

更新されているのはWP_Widgetではなく、参照されている方法です。

私たちが望んでいるのは、これから行くことだと思います。

class mZ_Mindbody_day_schedule extends WP_Widget {

        function mZ_Mindbody_day_schedule() {
                $widget_ops = array(
                        'classname' => 'mZ_Mindbody_day_schedule_class',
                        'description' => __('Display class schedule for current day.', 'mz-mindbody-api')
                        );
                $this->WP_Widget('mZ_Mindbody_day_schedule', __('Today\'s MindBody Schedule', 'mz-mindbody-api'),
                                                        $widget_ops );
        } 

これに:

class mZ_Mindbody_day_schedule extends WP_Widget {

        function mZ_Mindbody_day_schedule() {
                $widget_ops = array(
                        'classname' => 'mZ_Mindbody_day_schedule_class',
                        'description' => __('Display class schedule for current day.', 'mz-mindbody-api')
                        );
                parent::__construct('mZ_Mindbody_day_schedule', __('Today\'s MindBody Schedule', 'mz-mindbody-api'),
                                                        $widget_ops );
        } 

上記のコードの6行目のみが更新されます。

3
MikeiLL

WordPressはこの構文が非推奨であるという通知をあなたに与えています、なぜならそれはPHP7の準備をしているからです。 WP_Widget構成体の使用については、カスタムコードとプラグインを確認してください。彼らのコードを更新する必要がある(まだ)たくさんのプラグインがあります。

これは廃止予定のWP_Widget構造を使用するプラグインのリストです: https://Gist.github.com/chriscct7/d7d077afb01011b1839d

プラグインの作者がコードを更新するのを待つことも、自分で(一時的に)プラグインのコードを変更することもできます。あなたのコードを変更することについての良い要約があります( Chris Christoff によって)

基本的にこれらをする代わりに:

  • {classname}::{classname}()のようにWP_Widget::WP_Widget()または
  • parent::{classname}()のようにparent::WP_Widget()または
  • {object}->{classname}()のように{object}->WP_Widget()(より具体的な例:$this->WP_Widget()

行う:

  • 子クラスから親クラスのコンストラクタを呼び出すparent::__construct()
  • ウィジェットのインスタンスを保持するための$var = new {class name}()のような$var = new My_Widget_Class()(ウィジェットクラスの名前としてMy_Widget_Classを使用しないでください。ただし、他のプラグインとのクラス名の競合を避けるために、もっとユニークで適切なものを使用してください。
2

WP_DEBUGをオンにしたままにしてこの特定の種類のエラーを隠したい場合は、テーマfunctions.phpに次の行を追加してください。

add_filter('deprecated_constructor_trigger_error', '__return_false');

これにより、このようなエラーが表示されなくなります。

それが役立つことを願っています:)

1
Lorenzo Zottar

私は似たような船に乗っていました(最初はテーマのカスタムウィジェットを修正しなければなりませんでした)が、それらを修正した後でさえもメッセージを持っていました。

デフォルトのテーマに切り替えました:それでも同じエラーがありました。

TL; DR :プラグインを1つずつ無効化し始めました... found https://wordpress.org/plugins/list-category-posts/ が原因でした。

0
bishless