致命错误(调用成员函数...)在生产现场,但不在开发现场

时间:2017-03-09 作者:CK MacLeod

虽然我看到过类似错误的引用,但我还没有找到一个与我自己的非常特殊的错误类似的错误。

悲惨的故事

父主题生成许多专有小部件。不幸的是,这些小部件不能通过过滤器挂钩进行修改,因此,除非我只想对它们进行黑客攻击,使它们从修改一点html输出的某个插件中获取标记,否则它们需要通过子主题重新生成。或者不管怎样,这就是我所走的路线。

这似乎是一个简单的操作:为新的小部件创建一个新文件,并在新名称下注册新的子小部件,对编码在同一文件中的各个小部件类进行必要的更改(如父主题中)。新的子窗口小部件与原始主题的窗口小部件完全相同,只是在它们的类语句中添加了“child\\u0”,并且在需要的地方添加了修改其输出的代码。

没有其他改变,正如我所说,结果在我运行PHP 5.6.30/WP 4.73的开发站点上运行良好,但在两个远程站点上,都运行WP 4.73,一个运行5.6.30,另一个运行PHP 7。x、 我得到了以下崩溃错误的变化:

[08-Mar-2017 16:27:53 UTC] PHP Fatal error:  Uncaught Error: Call to a member function add_help_tab() on null in /web/htdocs3/pokeventurepl/home/www/wp-admin/widgets.php:51
Stack trace:
#0 /web/htdocs3/pokeventurepl/home/www/wp-content/themes/colormag-pro-child/functions.php(97): include_once()
#1 /web/htdocs3/pokeventurepl/home/www/wp-settings.php(423): include(\'/web/htdocs3/po...\')
#2 /web/htdocs3/pokeventurepl/home/www/wp-config.php(80): require_once(\'/web/htdocs3/po...\')
#3 /web/htdocs3/pokeventurepl/home/www/wp-load.php(37): require_once(\'/web/htdocs3/po...\')
#4 /web/htdocs3/pokeventurepl/home/www/wp-admin/admin.php(31): require_once(\'/web/htdocs3/po...\')
#5 /web/htdocs3/pokeventurepl/home/www/wp-admin/themes.php(10): require_once(\'/web/htdocs3/po...\')
#6 {main}
  thrown in /web/htdocs3/pokeventurepl/home/www/wp-admin/widgets.php on line 51
wp admin/widgets中的行。php就是这个:

get_current_screen()->add_help_tab( array(
如果我禁用子窗口小部件(注释掉include_once( \'child_widgets.php\' ) ; 从子主题函数。php文件)没有崩溃,当然,除了没有任何子窗口小部件可供使用。

即使没有激活插件,也会发生崩溃。当我禁用父主题中的所有小部件时,也会发生这种情况。

我的请求

有什么想法吗?

1 个回复
最合适的回答,由SO网友:CK MacLeod 整理而成

我要回答我自己的问题,虽然我不明白。。然而我会尝试进一步研究,并想看看是否有其他人可以解释。

我重写了wp管理/小部件。其中一个远程站点中的php文件(使用Softaculous脚本创建)与我的开发站点中的同一文件(手动创建)相同,问题解决了。

小部件的文件比较。另一个远程站点的php和我本地开发站点的php表示它们是相同的。同样的结果:上传了小部件。php从开发到远程,重写了后者,现在一切都好了。

奇怪的

补遗

我在这一点上的唯一猜测是,它在深层次上与字符或文件编码有关。我看到过与其他文件和流程相关的类似问题和解决方案。这是唯一一个涉及小部件的示例。我在研究中看到的php。

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'