WordPress V4.3中的WP_Widget弃用错误

时间:2015-08-19 作者:MuccyCork

这个错误直到今天早上我将wordpress网站更新到4.3版本时才发生。同一主机上的其他两个站点(都使用CPanel作为主机的管理门户)没有任何问题。在这一个有问题的网站公司。com尽管在wordpress管理门户和live网站上,页面顶部出现了多次重复的错误,即:

The error continues down the page like this 9 times.

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

我今天已经阅读了这篇文章,这可能与从PHP4升级到PHP5有关,尽管同一服务器上的其他WP站点没有问题。我还禁用了站点上的所有插件进行测试,问题仍然存在。除了从备份中恢复(这不容易做到,而且可能会导致自身错误)之外,今天/最近是否还有其他人存在此问题?

错误消息在结束时被切断之前,显示为建议解决方案本身,这并没有帮助

使用“。错误消息开始于”公司/public\\u html/wp包含/。。。“。第二行是”自版本4.3.0以来,WP\\U小部件的构造函数方法已被弃用。

版本4.3是WP今天更新的版本。它似乎导致了这个错误,但我不知道如何修复它。

我很乐意提供回答这个问题所需的任何其他信息。

6 个回复
SO网友:tjbp

这个错误实际上并不是由您的PHP版本引起的(PHP 4构造函数在PHP 7之前不会被删除)-这是WordPress为准备此操作而发出的警告。每个重复的错误代表一个使用过时代码的插件。

在插件作者更新它们之前,您可以在Linux系统上运行以下shell命令来查找旧的构造函数调用:

grep -R "WP_Widget\\(" /path/to/your/wp/install
这将为您提供一个文件列表,您可以在命令行上修改这些文件,也可以使用WP的插件编辑器。匹配字符串-大部分parent::WP_Widget(args) 应更改为parent::__construct(args).

SO网友:studiobovenkamer

WordPress通知您,此构造已被弃用,因为它正在准备PHP7。您应该检查您的自定义代码和任何插件,以使用WP\\u小部件构造。有(仍然)许多插件需要更新其代码。

以下是使用不推荐的WP\\U小部件构造的插件列表: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 但是,作为widget类的名称,请使用更独特和更适用的名称,以避免类名与其他插件冲突

SO网友:MikeiLL

看来不是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 );
        } 
只有上面代码的第六行得到了更新。

SO网友:Lorenzo Zottar

如果要保持WP\\U DEBUG打开,并且要隐藏此特定类型的错误,请放入主题函数。php此行:

add_filter(\'deprecated_constructor_trigger_error\', \'__return_false\');
这将防止显示此类错误。

我希望有帮助:)

SO网友:bishless

我也在一条类似的船上(首先必须在一个主题中修复一些自定义小部件),但即使在修复它们之后,我仍然收到了消息。

切换到默认主题:仍然有相同的错误。

TL;DR: 开始逐个停用插件。。。建立https://wordpress.org/plugins/list-category-posts/ 是罪魁祸首。

SO网友:Emanuel David Brigham Vitorino

Wordpress调试模式可以生成此类消息。

我在我的一个网站上也遇到了同样的问题。

也许你的wp配置中有这行代码。php文件:

define(\'WP_DEBUG\', true);
尝试将其更改为:

define(\'WP_DEBUG\', false);
希望有帮助。

结束

相关推荐

为什么dbDelta()不能捕获MysqlErrors?

据我所见,dbDelta() 用于抑制在其操作过程中发生的数据库错误。一般来说,情况似乎是这样,但New Relic仍在报告函数中的MysqlErrors。准确的错误消息格式如下:MysqlError: Table \'xxx.wp_yyy_posts\' doesn\'t exist 发件人dbDelta() 在里面/wp-admin/includes/upgrade.php, 我们有:// Fetch the table column structure from the database&