使用调用动作挂钩时
add_action(\'some_action_tag\',\'callback_function\',$priority,$number_of_arguments);
当
do_action()
使用相应的标记触发调用,例如:
do_action(\'some_action_tag\',$argument1,$argument2,$argument3....);
调用过滤器挂钩时使用:
add_filter(\'some_filter_tag\',\'callback_function\',$priority,$number_of_arguments);
当
apply_filters()
使用相应的标记触发调用,例如:
$value = apply_filters(\'some_filter_tag\',$argument1,$argument2,$argument3...);
现在,正如您所看到的,主要区别在于动作挂钩基本上允许您在给定点运行自己的函数,而过滤器挂钩允许您进行过滤(更改/更改/清除…)特定变量的值。
因此,action“hooked”callback\\u函数仅在指定参数时才接受参数,而filter“hooked”callback\\u函数至少接受一个参数,该参数是要改变自身的值,并且仅在指定参数时才接受更多参数。
至于你的问题
如何知道函数“SearchFilter”是否接受任何参数?
钩子函数(在本例中为SearchFilter)接受钩子触发的任何参数(或者apply_filters() 过滤器挂钩或do_action() 对于操作挂钩),要知道它们是什么,最好的方法是在代码中搜索挂钩标记(例如searchFilter)并查看它们是什么。然而,如上所述,因为我们将它挂接到过滤器挂钩,所以它将至少有一个参数。
那个论点是什么/它的类型是什么?如何确定哪个操作/筛选器有任何参数?
与上面一样,您可以在钩子触发器函数中看到,或者通过创建一个测试转储,这会是这样的?
function test_dump($a1=null,$a2=null,$a3=null,$a4=null,$a5=null){
if ($a1 !== null){
echo \'<pre>first argument: <br/>\';
var_dump($a);
echo \'</pre>\';
}
if ($a2 !== null){
echo \'<pre>2nd argument: <br/>\';
var_dump($a);
echo \'</pre>\';
}
if ($a3 !== null){
echo \'<pre>3rd argument: <br/>\';
var_dump($a);
echo \'</pre>\';
}
if ($a4 !== null){
echo \'<pre>4th argument: <br/>\';
var_dump($a);
echo \'</pre>\';
}
if ($a5 !== null){
echo \'<pre>5th argument: <br/>\';
var_dump($a);
echo \'</pre>\';
}
}
每个操作/筛选器是否都应返回传递的参数?
动作挂钩不需要返回值,所以不需要,但过滤器挂钩几乎每次都应该返回一个值。