最新消息:蔓草札记的微信公众号开通了,赶紧在微信通讯录公众号中搜索“蔓草札记”关注下吧 :)

WordPress发布文章的一些动作钩子

博客经验 xhhjin 5364浏览 0评论

WordPress 常用的有两种钩子,过滤钩子 add_filter 和动作钩子 add_action,它们是 WordPress 插件机制中非常重要的两个函数。过滤钩子用来创建一个过滤器,让其它的主题和插件对一个值进行修改过滤;动作钩子核心代码跟过滤钩子差不多,但是没有返回值,单纯的就是在特定的地方执行插件或者主题开发者挂载的函数。

wordpress-hooks

在开发WordPress 博客同步到 CSDN 插件时,需要在 WordPress 发布文章后,加入一些动作钩子函数,实现同步发布到其它博客平台的功能,但同时又要避免修改文章后的重复发布。最早版本用的是 publish_post 和 xmlrpc_public_post 这两个函数,结合发布时间判断,实现了基本的功能;随后又加入了 publish_future_post 来支持晚于当前时间的定时发布功能,但对于将定时发布时间设在当前时间之前的,就没法同步了。为了解决这个问题,今天又查了一些资料,最后用 transition_post_status 替换了上面提到的几个钩子,完美实现了定时发布后的文章同步问题,值得记录一下。

首先需要了解的是动作钩子的用法和参数:

<?php
add_action( $tag, $function_to_add, $priority = 10, $accepted_args =1);
?>

$tag是所挂载的动作钩子(action hooks)的名称,就是 WordPress 核心调用do_action()时一些可以触发的动作,用来确定挂载函数的位置,在官方Plugin API/Action ReferenceWordPress Hooks Database上可以查看动作钩子列表;$tag 也可以是一个主题或插件文件内部的一个动作,或者特定的标签“all”,这个函数将被所有的钩子调用。

$function_to_add是你挂载的函数,用来实现期望添加的功能。

$priority是可选项,用于指定和特定的动作相关联函数的执行顺序,数字越小,执行越早,默认值为 10。

$accepted_args也是可选项,用于标识挂钩函数所接受的参数数量,默认值为 1。

然后为了便于了解下面那些发布文章时会被触发的钩子,先简单介绍下几个涉及到的属性值:

$post为文章对象;$post_ID为文章 ID;$post_status为文章对象的发布状态(包括new,publish,future,draft,pending,private,trash,auto-draft 等);$post_type为文章对象的发布类型(包括 post,page,attachment,revision 等)。

最后就是相关的动作钩子:

  1. publish_post:参数一个($post_ID),点击发布文章时就会被触发;
  2. save_post:参数一个($post_ID),发布或更新文章时就会被触发;
  3. edit_post:参数两个($post_ID, $post),只要编辑已经存在的文章就会被触发;
  4. publish_future_post:参数一个($post_ID),到定时发布文章设定的时间点就会被触发,如果设定的时间早于发布时间,不会被触发;
  5. transition_post_status:参数三个($new_status, $old_status, $post),实现功能比较强大,可以根据文章发布状态的变化实现一些功能。
  6. {$old_status}_to_{$new_status}:参数一个($post),比如draft_to_publish是通常的文章发布事件,future_to_publish则可以用来处理定时文章发布事件。
  7. post_updated:参数三个($post_ID, $post_after, $post_before),已存在文章更新了就会被触发。

对比上面的函数说明可以发现,post_updated事件是最强大的,可以获取到文章修改前后的所有内容,参数较多;其次是transition_post_status事件,功能也比较强;接着是{$old_status}_to_{$new_status}事件,针对性较强,可以对特定情况进行事件抓取;而publish_postsave_postedit_postpublish_future_post这四个事件就相对比较简单,可以视情况而用。

WordPress 中有关发布、编辑文章的代码主要在文件 /wp-includes/post.php 里,主要函数有 wp_update_post、wp_insert_post 等,有兴趣可以去细细看下源码或者官方网站上的相关文档,一定会收获不少的。

最后的最后,如果你也有同步文章的需求,记得去试下WP2CSDNBlog 插件,目前已经支持同步 CSDN、新浪和网易博客了,好用的话记得给个好评喔!


欢迎转载,转载请注明出处:蔓草札记 » WordPress发布文章的一些动作钩子

♥ 喜欢 1 赞赏
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址