在WordPress PHP中收到有关user_func_array的警告...?

时间:2018-12-20 17:03:55

标签: php wordpress

我正在尝试通过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”功能可能有问题,但是我不确定它是什么。有帮助吗?

2 个答案:

答案 0 :(得分:2)

您的错误在此行上:

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);

答案 1 :(得分:1)

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

add_action('init', 'add_get_val');

我不确定这是否确实是您要执行的操作,但这就是为什么仍然会收到该错误的原因。