本文主要介绍了讲解WordPress钩子hook的概念及基本用法,hook是WordPress中调用函数的重要用法,也是开发WordPress各种功能和插件的时候经常用到的。
WordPress常用两种钩子,一种叫做动作(action),还有一种叫做过滤器(filter)。
动作钩子概念
动作钩子是WP代码执行到某处或某个事件发生时触发的一系列函数,插件可以利用动作钩子API在WP代码执行的特定点之前插入一系列函数以控制执行。它跟过滤钩子极像,唯一不同的是过滤钩子返回一个处理后的值,而动作钩子仅完成函数执行并不返回值,如果钩子不存在则返回NULL并新增该钩子。
动作钩子原理
由于动作钩子和过滤钩子几乎一样,所以它们的实现原理也是一样的。它主要利用一个全局变量$wp_filter,增加动作函数时使用add_action()函数给全局变量$wp_filter增加了一个数组元素,这个元素键名中含有钩子名,值中含有对应函数及执行优先级等信息,在调用do_action()函数使用动作钩子时,它通过循环查找出所有跟钩子关联的函数并将其依次调用,最后返回处理后的数据。
语法结构

add_action($hook,$function_to_add,$priority = 10,$accepted_args = 1)

add_action()作用:该函数用于给指定的动作钩子$hook添加指定的挂载函数$function_to_add,同时它可以确定挂载函数执行优先级及其可接收参数个数;
参数

$hook 为钩子名
$function_to_add 为挂载函数名
可选参数$priority为该挂载函数执行的优先级,默认为10,该数字越小则越早执行,数字相同则按其添加到钩子上的顺序执行,越早添加越早执行
可选参数$accepted_args确定挂载函数接收的参数个数,默认为1

只将概念的话可能会有点难以理解,下面我们结合一个例子进行讲解。wp_head 是一个很常用的动作钩子,在开发主题过程中,开发者都会在 head 标签里加上 wp_head() 函数,事实上,正是这个函数调用了 wp_head 钩子,如果没有这段代码则有的插件将不能正常工作,该函数位于wp-includes/general-template.php文件中,原函数如下:

function wp_head() {   
    do_action('wp_head');   
}

我们这样解释do_action函数:do_action执行一个“动作”,这个动作名称就是这个参数”wp_head”,这个wp_head动作是不需要定义的,do_action还有定义的功能,也就是先前不需要定义这个wp_head是什么、要干嘛,而do_action就定义了一个名叫wp_head的动作,并执行它。