我正在尝试通过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”功能可能有问题,但是我不确定它是什么。有帮助吗?
答案 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');
我不确定这是否确实是您要执行的操作,但这就是为什么仍然会收到该错误的原因。