Answers:
有条件的if ( isset($wp_filter['all']) ) {
您可以在以下挂钩创建函数中找到:
apply_filters
apply_filters_ref_array
do_action
do_action_ref_array
这些之间的差异在于发送的参数数量。我们要么需要多个参数,要么需要ref_array
单个参数。“动作与过滤器”的另一个区别很简单,动作可以执行任何功能/动作,并且过滤器名称通常保留给采用字符串数据并返回经过过滤的数据的函数。
好的,这是创建钩子的方式。并且钩子确实具有名称,并且您可以在相同的钩子名称中读取多个函数名称(读取:标记)。
但是,一旦定义了与特定挂钩相关的所有函数,就需要将所有挂钩名称和相关函数名称存储在某处。这就是为什么我们global $wp_filter
在WordPress中使用了。如果输出该变量,您将得到类似...
Array
(
[pre_term_name] => Array
(
[10] => Array
(
[sanitize_text_field] => Array
(
[function] => sanitize_text_field
[accepted_args] => 1
)
[wp_filter_kses] => Array
(
[function] => wp_filter_kses
[accepted_args] => 1
)
)
[30] => Array
(
[_wp_specialchars] => Array
(
[function] => _wp_specialchars
[accepted_args] => 1
)
)
)
好吧,让我们不要争论这个变量的名称。就个人而言,我将其称为不同,可能是$wp_hooks
因为未使用此名称。但是,如果我们重温历史,我们将找到do_action
,因为@since 1.2.0
它apply_filters
是@since 0.71
(发布于2003年6月9日)。这给您一个很好的解释,为什么要调用它$wp_filter
。最有可能是因为过滤器是在WordPress中首先引入的。后来他们介绍了动作。
只是建立在来自@TheDeadMedic的说法之上...
add_action('all','whatever')意味着每个do_action都会触发任何事件,而不管钩子的名称如何。
我提出了一个问题,为什么我们需要$wp_filter['all']
?仅举几个例子。在未来的WordPress版本中进行内省,测试以及可能的更多系统内部功能。