【问题标题】:Getting a warning about user_func_array in WordPress PHP...?在 WordPress PHP 中收到有关 user_func_array 的警告...?
【发布时间】:2018-12-20 17:03:54
【问题描述】:

我正在尝试通过 URL 将调查中的变量传递到 wordpress 网站。虽然变量确实成功通过,但我也收到此消息:

警告:call_user_func_array() 期望参数 1 是有效的回调,在第 286 行的 /home4/insig14/public_html/wp-includes/class-wp-hook.php 中没有给出数组或字符串

我知道这是一个“add_action”或add_filter“问题,我能想到的唯一问题是我添加到functions.php的代码:

for ($x=1;$x<=38;$x++){
    $a = "tsati";
    $b = $a . $x;
    add_action('init', add_get_val($b));

}

function add_get_val($b){
    global $wp;
    $wp-> add_query_var($b);
}

我传递了 38 个变量,每个变量都是“tsatiX”(例如 tsati1、tsati2...)。变量成功传递,但错误一直出现在网站顶部。这可能是我的“add_action”函数的问题,但我不确定它是什么。有什么帮助吗?

【问题讨论】:

  • 请注意,在将网站移动到其他主题之前(以及在 WordPress 5 之前),此错误从未出现过。

标签: php wordpress


【解决方案1】:

你的错误在这一行:

add_action('init', add_get_val($b));

此函数旨在注册一个回调,以便在 WordPress 处理 'init' 操作时运行 - 第二个参数应该是要运行的回调。但是你实际上是在运行这个函数,所以传入它的结果。

如果我们用一个临时变量将一行分成两部分,这可能会更清楚:

$temp = add_get_val($b);
add_action('init', $temp);

所以add_get_val 正在立即运行,但由于它不返回任何内容,所以null 被传递给add_action。 WordPress 不会检查这一点,因此稍后会尝试将 null 作为回调执行,给您错误。

如果要将add_get_val注册为回调,则将其作为字符串传入:

add_action('init', 'add_get_val');

或者,您可能希望 an anonymous function 成为回调:

add_action('init', function() use ($b) { add_get_val($b); });

或者也许直接运行该代码就可以了,根本不从init钩子注册它,因为你的代码似乎工作正常,在这种情况下你可以运行:

add_get_val($b);

【讨论】:

  • 谢谢!我决定立即运行代码,从而解决了这个问题。你的解释很有道理,但我发现这个错误以前从未出现在网站上很有趣。
  • @CarlosArellano 也许您之前的主题从未真正处理过init 钩子,所以如果您 传递了一个有效的回调,它就不会起作用?或者,您可能只是更改了错误报告设置,却没有意识到此警告始终存在。
【解决方案2】:

add_action 的第二个参数是supposed to be a callable,但您传递的是null,因为add_get_val 函数不返回任何内容。如果您打算传递 add_get_val 函数而不是调用该函数的结果,只需将其名称作为字符串传递。

add_action('init', 'add_get_val');

我不确定这是否真的是你想要做的,但这就是你得到这个错误的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多