虽然我看到过类似错误的引用,但我还没有找到一个与我自己的非常特殊的错误类似的错误。
悲惨的故事
父主题生成许多专有小部件。不幸的是,这些小部件不能通过过滤器挂钩进行修改,因此,除非我只想对它们进行黑客攻击,使它们从修改一点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文件)没有崩溃,当然,除了没有任何子窗口小部件可供使用。
即使没有激活插件,也会发生崩溃。当我禁用父主题中的所有小部件时,也会发生这种情况。
我的请求
有什么想法吗?
最合适的回答,由SO网友:CK MacLeod 整理而成
我要回答我自己的问题,虽然我不明白。。然而我会尝试进一步研究,并想看看是否有其他人可以解释。
我重写了wp管理/小部件。其中一个远程站点中的php文件(使用Softaculous脚本创建)与我的开发站点中的同一文件(手动创建)相同,问题解决了。
小部件的文件比较。另一个远程站点的php和我本地开发站点的php表示它们是相同的。同样的结果:上传了小部件。php从开发到远程,重写了后者,现在一切都好了。
奇怪的
补遗
我在这一点上的唯一猜测是,它在深层次上与字符或文件编码有关。我看到过与其他文件和流程相关的类似问题和解决方案。这是唯一一个涉及小部件的示例。我在研究中看到的php。