【问题标题】:PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'remove_wpcf7' not found or invalid function namePHP 警告:call_user_func_array() 期望参数 1 为有效回调,未找到函数“remove_wpcf7”或函数名称无效
【发布时间】:2019-01-25 08:33:29
【问题描述】:

对于这个广泛的问题,我深表歉意,但我目前对错误日志条目并不十分熟悉。任何关于从哪里开始相关研究的指示,将不胜感激。

在过去的 12 个月里,我安装了 Google 身份验证插件,安装在我工作的 WordPress 支持的电子商务网站上。在最近的 VPS 和 WordPress 更新之前,插件没有任何问题。由于上述更新,Google Authenticate Plugin 无法识别任何输入的代码。我不确定错误是由 WordPress 更新还是 VPS 本身触发的。

然后我检查了error_log,并在尝试使用 Google Authenticate Plugin 时看到了以下条目:

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 核心文件的引用。可能有一些不兼容的地方?

对此的任何指示,将不胜感激......即使只是帮助我扩展这个问题。

【问题讨论】:

  • 卸载联系表 7。我敢打赌错误会消失
  • 我使用的是 PHP 版本:7.0.31。我已卸载所有插件(包括联系表 7),但仍会生成错误日志条目。
  • 您是否尝试在您的设备上重新同步验证器?
  • 如果这不起作用,请在 wp-content/plugins 文件夹中的所有插件文件中搜索“remove_wpcf7”字符串。这样,您将获得导致问题的插件。找到后,把这个函数的代码片段贴在这里,这样我们就可以检查那里有什么问题。
  • @IvnH:感谢您的建议。我已经重新同步了 Google Authenticator,尽管它确实说 Times 都是正确的。此外,Google Authenticator 应用程序(在手机/手机上)可以与其他网站一起使用,这些网站不在我的 VPS 上。

标签: php wordpress vps google-authentication mod-fcgid


【解决方案1】:

在代码中查找对“remove_wpcf7”的任何引用,并在过滤器/挂钩中分配查找方法。 在这种情况下,您可以找到例如错误调用的类中的方法。例如: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 扩展更好),你会看到行正在创建这个过滤器。

【讨论】:

  • 你是对的,当然,但 cmets 中已经有人建议,并且 Craig 停用了他的所有插件。
  • @IvnH 我只是更新了我的答案,我很确定这是在代码的某些部分丢失的 add_filter 方法。有了这种“样”的调试,希望能找到这段代码。
  • 在这里感谢您的建议。不幸的是,此条目使网站离线。
  • @Craig 我想你在本地主机上。还原此更改并查看错误日志。现在你有了跟踪,你可以看到文件正在添加这个方法。
  • @SantiagoCerroLópez:感谢您抽出宝贵时间提出我的问题,但我现在已经找到了解决方案,正如我在此处的回答。 :-)
【解决方案2】:

尝试将此功能添加到您的 WP。

这里是添加到你的主题的function.php文件中的代码:

function remove_wpcf7(){
}

【讨论】:

    【解决方案3】:

    终于找到了解决办法...它与服务器时间设置有关。

    如果其他人的 Google 身份验证功能遇到类似问题,您需要确保服务器的时间设置与“互联网时钟”同步。

    1. 登录您的 VPS;
    2. 前往Tools & Settings > General Settings > System Time
    3. 在这里,您应该有一个看起来像这样的屏幕:

    4. 确保Date & Time > Update system time取消选择

    5. 确保Network time > Synchronize system time选中
    6. 然后在Network time > Domain name or IP 中输入3.pool.ntp.org 并选择“确定”。正是这一步,我需要这样做才能解决我自己的问题。

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 2012-05-09
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 2013-08-01
      • 2016-10-29
      相关资源
      最近更新 更多