
钩子是 WordPress 的精髓
他们允许插件开发人员钩进 WordPress 工作流程(WordPress的核心代码或主题框架等代码),插入代码或修改值,而不用修改原代码。
插没有钩子,插件就没办法改变 WordPress 的功能了。
钩子处理动作

1、把钩子埋到埋点
do_action()和apply_filters():埋钩子,通过这两个函数把钩子插入埋点
2、钩一个函数到这个卖点(动作或过滤器)
add_action()和add_filter():调用一个回调函数,执行的代码或返回值插入到埋点
原理理解:
程序在执行过程中,如果这个地方埋了钩子,则会先执行这些动作(过滤器),执行完继续往下走;
后面的开发者可以通过添加动作(过滤器),在不改变上游程序的情况下,插入代码或修改赋值。
用在哪些地方
几个地方会用到:
- WordPress核心:指的是 WordPress 内建的程式码架构,提供 WordPress 主要的基本功能
- 主题框架、父主题
- 主题functions
- 插件文件
一般情况下:
do_action()和apply_filters() 存在于WordPress核心代码或主题框架或父主题中。
add_action()和add_filter() 存在于插件中(最重要的用法);也用于主题的functions文件(针对核心代码埋的钩子)或子主题的模板文件中(针对主题框架或父主题埋的钩子)。
钩子分类
- 动作(action):让你可以在 WordPress 加载过程中或者当某个事件发生的特定时刻触发一个函数,执行相关指令
- 过滤器(filter):让你可以在 WordPress 加载过程中或者当某个事件发生的特定时刻触发一个函数,修改一个赋值(有返回值)
动作钩子(action)
do_action():执行动作
add_action():添加动作
过滤器(filter)
apply_filters():创建过滤器
add_filter():添加钩子
动作和过滤器的区别
过滤器有返回值,而动作没有
举例:
<?php
add_action( 'wp_footer', 'boj_example_footer_message', 100 );
?>
过滤器钩子可以让你改一些东西的值,过滤器回调函数会接受一个参数,这就是当前的值
举例:
调用文章内容的 the_content() 函数,这个函数就提供了一个 the_content 过滤器
给 the_content 钩子添加一个函数,这个函数需要接收一个参数,这个参数就是当前的值。
//文章内容全部链接新窗口打开
function Bing_autoblank( $content ){//$content 变量就是文章内容,因为其它过滤器也要过滤,所以这个内容可能是经过其它函数过滤的
$content = str_replace( '<a', '<a target="_blank"', $content );//添加 target="_blank"
return $content;//必须要把过滤后的内容返回回去,否则值就丢了
}
add_filter( 'the_content', 'Bing_autoblank' );