技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> PHP --> WordPress插件开发--获知文章状态变化

WordPress插件开发--获知文章状态变化

浏览:4371次  出处信息

   文章(post)是 博客的核心价值所在,围绕一篇文章的增、删、改,我们可以开发很多有用的插件。近来,由于维护一款插件的需要,我碰巧研究了一下围绕文章发布流程而设立的一些钩子(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种钩子,我们就可以随时掌控任何文章的状态变化了。


建议继续学习:

  1. WordPress评论翻页造成404页面的解决方案    (阅读:7897)
  2. WordPress插件开发 -- 在插件使用数据库存储数据    (阅读:5410)
  3. WordPress安全建议    (阅读:5178)
  4. WordPress数据字典    (阅读:4132)
  5. SEO:wordpress页面标记优化    (阅读:3578)
  6. WordPress模板的image.php    (阅读:3413)
  7. WordPress重定向漏洞    (阅读:2977)
  8. wordpress博客优化12条    (阅读:2886)
  9. SEO:wordpress相同内容网页优化    (阅读:2878)
  10. 简单好用的土办法抗击洋鬼子对wordpress系统的广告灌入    (阅读:2726)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1