自版本 4.3.0 起,WP_Widget的被调用构造函数方法已弃用如何修复?

2022-08-30 14:09:47

我刚刚更新到WordPress 4.3,似乎有些东西坏了。

我收到此错误,该错误显示在我的页面上:

注意:自 4.3.0 版起,WP_Widget的被调用构造函数方法已弃用!请改用。在 /mnt/stor13-wc1-ord1/754452/www.eden-festival.com/web/content/securewp/wp-include/functions.php 第 3457 行__construct()

有什么需要修复的吗?


答案 1

由于php 7不支持php 4对象构造并被Wordpress取代,开发人员创建了一个通知消息,以便插件开发人员将更改其插件的工作方式。由于 php 4 已经死了很长一段时间了,所以没有理由使用这种风格的对象构造。__construct()

如何修复?

选项1 - 不打算升级到较新的php版本

只需添加add_filter('deprecated_constructor_trigger_error', '__return_false');

到您的函数.php文件,它将忽略这些通知。

选项2 - 可以升级到php 7 /更喜欢处理问题而不是沉默它

如果这是第三方插件,请注意,如果您自己进行更改并且插件开发人员发布了更新,那么它将覆盖您的更改。联系插件开发人员以解决此问题将是最佳选择

找到有问题的插件并更改:

parent::WP_Widget

parent::__construct


答案 2

我也得到了同样的错误,我以这种方式修复了它

class Dokan_Category_Widget extends WP_Widget {

    /**
     * Constructor
     *
     * @return void
     **/
    public function __construct() {
        $widget_ops = array( 'classname' => 'dokan-category-menu', 'description' => __( 'Dokan product category menu', 'dokan' ) );
        $this->WP_Widget( 'dokan-category-menu', 'Dokan: Product Category', $widget_ops );
    }
}

由于以这种方式调用构造函数的方式在 php 7 中被弃用,所以我将调用方式替换为$this->WP_Widget()parent::__construct()

class Dokan_Category_Widget extends WP_Widget {

    /**
     * Constructor
     *
     * @return void
     **/
    public function __construct() {
        $widget_ops = array( 'classname' => 'dokan-category-menu', 'description' => __( 'Dokan product category menu', 'dokan' ) );
        //$this->WP_Widget( 'dokan-category-menu', 'Dokan: Product Category', $widget_ops );
        parent::__construct('dokan-category-menu', 'Dokan: Product Category', $widget_ops  );
    }
}

推荐