WordPress插件开发--获知文章状态变化
文章(post)是 WordPress 博客的核心价值所在,围绕一篇文章的增、删、改,我们可以开发很多有用的插件。近来,由于维护一款插件的需要,我碰巧研究了一下围绕文章发布流程而设立的一些钩子(hook)。微有所得,记录备查。
事情的起因是插件中的一个函数hook到了一个action上,名字是publish_post,顾名思义,在文章发布时候被激发的。为了要更清楚地掌控这个action,我想在源代码中,把触发点给找出来,这一找,问题来了。理论上,我们hook任何action,WP内部都会有对应的do_action来激发这个钩子,这一次,一搜,根本没有publish_post,那就有点小麻烦,说明具体激发哪个钩子,是运行时决定的,再明白点说吧,这个action的名字,应该使用变量拼出来的,所以我们直接搜publish_post很难找到调用点。
具体寻找的过程,我也不想赘述了,无非是查文档,搜代码。这里想要一提的是,我发现一个新的小技巧,给技巧取个名字叫“农村包围城市”,因为一下无法定位到想要找的代码,那么能准确定位其周边代码也是可以的,至少可以缩小查找范围。从文档中我们看到,在publish_post被激发的点附近,应该还有save_post,那么搜一下save_post,乖乖,准确找到了,然后就看到还有wp_insert_post,pre_post_update等等。然后,马上写一个小插件,向4个感兴趣的点hook,然后随便发布一下文章,根据打出的log,基本确定了publish_post就在pre_post_update和save_post中间激发。这时候就剩下80行左右的范围了,那一行行找还是很快的。
最终结果还是比较有意思的,有个函数叫wp_transition_post_status,这里面提供了3个hook,也可以说n个吧,因为这里面就看到了那个运行时才决定的hook名称的代码。最后不但搞清楚了publish_post的激发原理,还发现了原来可以随意通过hook监测每篇文章的状态变化。虽然短期内看不出来有啥用,但是以后一定可以想出来一些应用的。
transition_post_status 当一篇文章或者页面状态变化时触发,三个参数,分别是原状态,现在状态,文章对象本身
状态_to_状态 某个具体的状态流转时候触发,可以是draft_to_pending,private_to_publish等等,只要是合法的status取值,可以随意组合。一个参数是文章对象本身。
状态_类型 一个状态+一个类型,可以知道publish_post这个钩子,本质上就是这种,真实含义是有一篇类型是post(还可以是page)的文章,状态变成了publish,而不是已开始我理解成的发布一篇文章时候激发。说起来差别不大,但是你对其的理解已经完全变掉了。以此类推,你可以hook到private_post,还可以是draft_page等等。随意组合。
通过上述非常灵活的3种钩子,我们就可以随时掌控任何文章的状态变化了。
建议继续学习:
- WordPress评论翻页造成404页面的解决方案 (阅读:8033)
- WordPress插件开发 -- 在插件使用数据库存储数据 (阅读:5623)
- WordPress安全建议 (阅读:5361)
- WordPress数据字典 (阅读:4182)
- SEO:wordpress页面标记优化 (阅读:3624)
- WordPress模板的image.php (阅读:3630)
- WordPress重定向漏洞 (阅读:3200)
- wordpress博客优化12条 (阅读:2923)
- SEO:wordpress相同内容网页优化 (阅读:2931)
- 简单好用的土办法抗击洋鬼子对wordpress系统的广告灌入 (阅读:2860)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Charles 来源: Becomin' Charles
- 标签: hooks WordPress
- 发布时间:2012-12-07 23:50:05
- [56] Oracle MTS模式下 进程地址与会话信
- [56] IOS安全–浅谈关于IOS加固的几种方法
- [55] 如何拿下简短的域名
- [54] 图书馆的世界纪录
- [53] Go Reflect 性能
- [53] android 开发入门
- [50] 【社会化设计】自我(self)部分――欢迎区
- [50] 读书笔记-壹百度:百度十年千倍的29条法则
- [39] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑