WordPress 插件机制的简单用法和原理(Hook 钩子)
WordPress 的插件机制实际上只的就是这个 Hook 了,它中文被翻译成钩子,允许你参与 WordPress 核心的运行,是一个非常棒的东西,下面我们来详细了解一下它。
PS:本文只是简单的总结一下,更多用法还是要参考文中给出的函数。
钩子分类
钩子分为两种,一种叫做动作(action),还有一种叫做过滤器(filter)。这两种钩子实现原理基本一样,后边会讲到,使用上的区别在于过滤器有返回值,而动作没有。
动作的理念是让你在一种情况或者一个特别的位置执行一些函数,比如发送一封邮件等;过滤器则是让你修改 WordPress 核心需要用到的一个值,然后 WordPress 再用这些值做一些事情,比如函数的返回值等。
动作钩子
wp_head 是一个很常用的动作钩子,在开发主题过程中,开发者都会在 head 标签里加上 wp_head() 函数,事实上,正是这个函数调用了 wp_head 钩子。
如果插件开发者想要在 head 标签里添加一句话,就可以使用 wp_head 钩子,下边是个简单的例子。
|
|
添加代码后,查看前台的网页源代码,就能在 head 标签里看到我们添加的内容了。
上边是一个简单的例子,只是打印了一句话。利用这个钩子,我们还可以做一个遇到 404 页面给管理员发送一封邮件的插件,下边简单的写了一个。
|
|
更多关于 add_action() 函数的内容:《 WordPress 函数:add_action()(添加动作) 》
过滤器钩子
根据我的亲身经历,可能过滤器钩子会难理解些,尤其对不熟悉 PHP 的人来说。
过滤器钩子可以让你改一些东西的值,过滤器回调函数会接受一个参数,这就是当前的值。还记得那个用来调用文章内容的 the_content() 函数吧,这个函数就提供了一个 the_content 过滤器。
给 the_content 钩子添加一个函数,这个函数需要接收一个参数,这个参数就是当前的值。
|
|
更多关于 add_filter() 函数的内容:《 WordPress 函数:add_filter()(添加过滤器) 》
调用钩子
WordPress 核心是怎么调用这些钩子的就不再这篇文章了,可以参考下边两篇文章。
动作钩子:《 WordPress 函数:do_action()(执行动作) 》
过滤器钩子:《 WordPress 函数:apply_filters()(创建过滤器) 》
钩子原理
事实上,在调用 add_action() 和 add_filter() 的时候,只是向 $wp_filter 全局变量添加了一个数组元素,还要说的就是动作和过滤器是公用的一个全局变量,也就是说,过滤器和动作是不能重名的。
当调用 do_action() 的时候,会查找 $wp_filter 全局变量中都有哪些添加到此动作的函数,循环执行即可。
apply_filters() 比 do_action() 多了一个步奏,就是每次调用函数时还要接收这个函数的返回值,最后把经过多次过滤的值返回出去,供使用。
Reference from : http://www.endskin.com/hook.html
WordPress 插件机制的简单用法和原理(Hook 钩子)的更多相关文章
- 黄聪:wordpress中remove_action、add_action、 do_action()的hook钩子都有哪些
原文地址:http://codex.wordpress.org/Plugin_API/Action_Reference muplugins_loaded After must-use plugins ...
- Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结 1. 微内核与插件的优点1 2. 插件的注册与使用2 2.1. Ioc容器中注册插件2 2.2. 启动器微内核启动3 ...
- MyBatis 源码分析 - 插件机制
1.简介 一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展.这样的好处是显而易见的,一是增加了框架的灵活性.二是开发者可以结合实际需求,对框架进行拓展,使其能够更好的工作.以 My ...
- 精尽MyBatis源码分析 - 插件机制
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- Wordpress解析系列之PHP编写hook钩子原理简单实例
Wordpress作为全球应用最广泛的个人博客建站工具,有很多的技术架构值得我们学习推敲.其中,最著名最经典的编码技术架构就是采用了hook的机制. hook翻译成中文是钩子的意思,单独看这个词我们难 ...
- typecho流程原理和插件机制浅析(第二弹)
typecho流程原理和插件机制浅析(第二弹) 兜兜 393 2014年04月02日 发布 推荐 1 推荐 收藏 14 收藏,3.7k 浏览 上一次说了 Typecho 大致的流程,今天简单说一下插件 ...
- typecho流程原理和插件机制浅析(第一弹)
typecho流程原理和插件机制浅析(第一弹) 兜兜 393 2014年03月28日 发布 推荐 5 推荐 收藏 24 收藏,3.5k 浏览 虽然新版本0.9在多次跳票后终于发布了,在漫长的等待里始终 ...
- Omi框架学习之旅 - 插件机制之omi-finger 及原理说明
以前那篇我写的alloyfinger源码解读那篇帖子,就说过这是一个很好用的手势库,hammer能做的,他都能做到, 而且源码只有350来行代码,很容易看懂. 那么怎么把这么好的库作为omi库的一个插 ...
- Dubbo原理和源码解析之“微内核+插件”机制
github新增仓库 "dubbo-read"(点此查看),集合所有<Dubbo原理和源码解析>系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行 ...
随机推荐
- 测试思考[持续更新ing]
1.如何设计好的测试用例,提高测试覆盖率?提高测试效率? 2.如何展现测试成果? 3.如何编写专业化.优质的测试文档? 4.如何适时借助测试工具,测试一些重复性比较高的测试? 5.如何引入自动化测试? ...
- POJ 2186 Popular Cows --强连通分量
题意:给定一个有向图,问有多少个点由任意顶点出发都能达到. 分析:首先,在一个有向无环图中,能被所有点达到点,出度一定是0. 先求出所有的强连通分支,然后把每个强连通分支收缩成一个点,重新建图,这样, ...
- POJ 2773 Happy 2006【GCD/欧拉函数】
根据欧几里德算法,gcd(a,b)=gcd(a+b*t,b) 如果a和b互质,则a+b*t和b也互质,即与a互质的数对a取模具有周期性. 所以只要求出小于n且与n互质的元素即可. #include&l ...
- [转]比较Jmeter、Grinder和JAVA多线程本身压力测试所带来的性能开销
1. 测试环境 jmeter版本 :jmeter 2.4 grinder的版本 : Grinder 3 JAVA的版本:JDK 1.6 2. 测试代码 Jmeter测试代码 public class ...
- 解决Gradle DSL method not found: ‘android()’
最近导入as的项目出了这样的问题 这个问题困扰了我很长时间,好吧,搜了半天全都是runProguard的,最后在stackoverflow上搜到解决办法了: http://stackoverflow. ...
- 程序4-5 打开一个文件,然后unlink
//http://blog.chinaunix.net/uid-24549279-id-71355.html /* ========================================== ...
- KVM虚拟机网络基础及优化说明
一个完整的数据包从虚拟机到物理机的路径是: 虚拟机--QEMU虚拟网卡--虚拟化层--内核网桥--物理网卡 KVM的网络优化方案,总的来说,就是让虚拟机访问物理网卡的层数更少,直至对物理网卡的单独占领 ...
- 16SpringMvc_在业务控制方法中写入User,Admin多个模型收集参数——引出问题
上面文章时普通的业务那个方法中收集一个实体类,这篇文章想收集两个实体类. 文本要做的是:在person.jsp页面上,有两个表单.分别是普通用户和管理员用户的表单(普通用户的表单和管理员用户的表单里面 ...
- ruby on rails gem install pg时无法安装
gem install pg -v '0.18.2' Building native extensions. This could take a while... ERROR: Error insta ...
- Javascript跨域问题总结
疯狂的JSONP 关于JSON与JSONP简单总结 window.name实现的跨域数据传输 JavaScript跨域总结与解决办法 flash跨域策略文件crossdomain.xml配置详解