PHP 警告:call_user_func_array() 要求参数 1 为有效回调,未找到函数 'remove_wpcf7' 或函数名称无效
PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'remove_wpcf7' not found or invalid function name
对于这个宽泛的问题深表歉意,但我目前对错误日志条目不是很熟悉。任何关于从哪里开始相关研究的指示,将不胜感激。
在过去的 12 个月里,我已经安装了 Google Authenticate 插件,该插件安装在我工作的一个由 WordPress 驱动的电子商务网站上。在最近的 VPS 和 WordPress 更新之前,插件没有任何问题。由于上述更新,Google 身份验证插件无法识别任何输入的代码。我不确定错误是由 WordPress 更新还是 VPS 本身触发的。
然后我检查了 error_log
并在尝试使用 Google 身份验证插件时看到了以下条目:
mod_fcgid: stderr: PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'remove_wpcf7' not found or invalid function name in /var/www/vhosts/example.com/httpdocs/wp-includes/class-wp-hook.php on line 286, referer: https://www.example.com/wp-admin/plugins.php
疑难解答
作为标准,我停用了所有插件(WooCommerce 插件除外)以及我创建的 WordPress 主题。然后我简单地激活了 WordPress 的 Twenty Seventeen 主题。错误仍然存在;让我想知道是什么导致了这个问题。
我可以看到有对 WordPress 核心文件的引用。也许有一些不兼容?
任何关于此的指示,将不胜感激......即使只是帮助我扩展这个问题。
在代码中查找对 'remove_wpcf7' 的任何引用,并在 filter/hook 中分配查找方法。
在这种情况下,您会发现 class 中的一个方法调用不正确。例如:add_filter('filter_name', 'method');
。您可以修复,例如,通过添加:add_filter('filter_name', array($this, 'method'));
或者如果方法是静态的:add_filter('filter_name', array(CLASSNAME::class, 'method'));
希望对您有所帮助
===
更新
编辑 wp-includes/class-wp-hook.php 第 73 行并添加:
public function add_filter( $tag, $function_to_add, $priority, $accepted_args ) {
if ($function_to_add === 'remove_wpcf7') {
throw new \Exception('Exception');
}
[...]
}
跟踪这个未捕获的异常(如果你可以使用 xdebug 扩展更好),你会看到行正在创建这个过滤器。
尝试将此功能添加到您的 WP。
这是要添加到主题 function.php 文件中的代码:
function remove_wpcf7(){
}
终于找到解决办法了……跟服务器时间设置有关。
如果其他人遇到与他们的 Google 身份验证功能类似的问题,您将需要确保您的服务器的时间设置与“互联网时钟”同步。
- 登录您的 VPS;
- 前往
Tools & Settings > General Settings > System Time
;
在这里,您的屏幕应该类似于:
确保Date & Time > Update system time
是deselected;
- 确保
Network time > Synchronize system time
是selected;
- 然后在
Network time > Domain name or IP
中输入 3.pool.ntp.org
和 select 'Ok'。这是我需要做的这一步,以解决我自己的问题。
如果您是因为 Timber/Twig 来到这里,这是将 add_filter 与 timber/context 一起使用的正确方法示例:
add_filter('timber/context', function($context) {
$context['promo_modal'] = get_field('promo_modal', 'option');
return $context;
});
对于这个宽泛的问题深表歉意,但我目前对错误日志条目不是很熟悉。任何关于从哪里开始相关研究的指示,将不胜感激。
在过去的 12 个月里,我已经安装了 Google Authenticate 插件,该插件安装在我工作的一个由 WordPress 驱动的电子商务网站上。在最近的 VPS 和 WordPress 更新之前,插件没有任何问题。由于上述更新,Google 身份验证插件无法识别任何输入的代码。我不确定错误是由 WordPress 更新还是 VPS 本身触发的。
然后我检查了 error_log
并在尝试使用 Google 身份验证插件时看到了以下条目:
mod_fcgid: stderr: PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'remove_wpcf7' not found or invalid function name in /var/www/vhosts/example.com/httpdocs/wp-includes/class-wp-hook.php on line 286, referer: https://www.example.com/wp-admin/plugins.php
疑难解答
作为标准,我停用了所有插件(WooCommerce 插件除外)以及我创建的 WordPress 主题。然后我简单地激活了 WordPress 的 Twenty Seventeen 主题。错误仍然存在;让我想知道是什么导致了这个问题。
我可以看到有对 WordPress 核心文件的引用。也许有一些不兼容?
任何关于此的指示,将不胜感激......即使只是帮助我扩展这个问题。
在代码中查找对 'remove_wpcf7' 的任何引用,并在 filter/hook 中分配查找方法。
在这种情况下,您会发现 class 中的一个方法调用不正确。例如:add_filter('filter_name', 'method');
。您可以修复,例如,通过添加:add_filter('filter_name', array($this, 'method'));
或者如果方法是静态的:add_filter('filter_name', array(CLASSNAME::class, 'method'));
希望对您有所帮助
===
更新
编辑 wp-includes/class-wp-hook.php 第 73 行并添加:
public function add_filter( $tag, $function_to_add, $priority, $accepted_args ) {
if ($function_to_add === 'remove_wpcf7') {
throw new \Exception('Exception');
}
[...]
}
跟踪这个未捕获的异常(如果你可以使用 xdebug 扩展更好),你会看到行正在创建这个过滤器。
尝试将此功能添加到您的 WP。
这是要添加到主题 function.php 文件中的代码:
function remove_wpcf7(){
}
终于找到解决办法了……跟服务器时间设置有关。
如果其他人遇到与他们的 Google 身份验证功能类似的问题,您将需要确保您的服务器的时间设置与“互联网时钟”同步。
- 登录您的 VPS;
- 前往
Tools & Settings > General Settings > System Time
; 在这里,您的屏幕应该类似于:
确保
Date & Time > Update system time
是deselected;- 确保
Network time > Synchronize system time
是selected; - 然后在
Network time > Domain name or IP
中输入3.pool.ntp.org
和 select 'Ok'。这是我需要做的这一步,以解决我自己的问题。
如果您是因为 Timber/Twig 来到这里,这是将 add_filter 与 timber/context 一起使用的正确方法示例:
add_filter('timber/context', function($context) {
$context['promo_modal'] = get_field('promo_modal', 'option');
return $context;
});