【发布时间】:2023-02-08 19:45:51
【问题描述】:
我一直在使用一个 WordPress 插件,它是不再维护(现场直播)。我最近将网站更新为 PHP8,但是这个插件,只要它处于活动状态,现在就会导致致命的 WordPress 错误。我宁愿保留插件,即使我必须暂时手动“修补”它。
我相信我可以将错误追溯到这个:
PHP Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, non-static method
我注意到这并没有明确告诉我导致错误的 PHP 代码行 - PHP 错误日志引用的行位于 /wp-includes/class-wp-hook.php、/wp-settings.php 和/wp-load.php 文件,我认为这些文件本身不会直接导致问题。
检查一些插件代码,我注意到它做了以下事情:
function init()
{
OmAlb_LiveCom_HookHandlers::add_shortcode();
}
像上面这样的代码示例有很多。这会导致致命错误吗?如果是这样,应该如何手动重组代码以防止致命错误?
编辑 - 这是完整的错误:
AH01071:出现错误“PHP 消息:PHP 致命错误:未捕获类型错误:call_user_func_array():参数 #1 ($callback) 必须是有效回调,非静态方法 OmAlb_LiveCom::plugins_loaded() 无法在 /var/ 中静态调用www/vhosts/<>/httpdocs/wp-includes/class-wp-hook.php:308
堆栈跟踪:
#0 /var/www/vhosts/<>/httpdocs/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()<br>n
#1 /var/www/vhosts/<>/httpdocs/wp-includes/plugin.php(517): WP_Hook->do_action()\n
#2 /var/www/vhosts/<>/httpdocs/wp-settings.php(480): do_action()\n
#3 /var/www/vhosts/<>/httpdocs/wp-config.php(101): require_once('...')\n
#4 /var/www/vhosts/<>/httpdocs/wp-load.php(50): require_once('...')\n
#5 /var/www/vhosts/<>/httpdocs/wp-blog-header.php(13): require_once('...')\n
#6 /var/www/vhosts/<>/httpdocs/index.php(17): require('...')\n
#7 {main}\n throw in /var/www/vhosts/<>/httpdocs/wp-includes/class-wp-hook.php on line 308', referer: https://<>/<>`
【问题讨论】:
-
PHP 错误日志引用的行......所以向我们展示错误消息,然后我们就可以看到错误在哪里,我假设堆栈跟踪让你感到困惑
-
“这是导致致命错误的原因吗?”- 不,因为那是一个直接方法调用,
call_user_func_array甚至没有涉及到这一点。 -
我编辑了问题以显示日志中的完整错误。我试图简明扼要。