<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>-Flyぁ梦- &#187; Action事件</title>
	<atom:link href="http://blog.11034.org/tag/action%e4%ba%8b%e4%bb%b6/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.11034.org</link>
	<description></description>
	<lastBuildDate>Sun, 22 Jun 2025 08:59:05 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>wordpress发布文章时的Action事件</title>
		<link>http://blog.11034.org/2012-09/wordpress_post_actions.html</link>
		<comments>http://blog.11034.org/2012-09/wordpress_post_actions.html#comments</comments>
		<pubDate>Wed, 26 Sep 2012 13:08:32 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Action事件]]></category>
		<category><![CDATA[事件驱动]]></category>

		<guid isPermaLink="false">http://blog.stariy.org/?p=1322</guid>
		<description><![CDATA[昨天一网友加QQ询问关于wp-sns-share对于定时发布文章同步微博失效的问题，然后LZ才知道wordpr [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>昨天一网友加QQ询问关于wp-sns-share对于定时发布文章同步微博失效的问题，然后LZ才知道wordpress还支持定时发布文章文章这一神奇的功能，原来在发布文章的界面点击 “立即发布” 右边的编辑按钮选择一个未来的时间，再点击确定，就变成定时发布了。</p>
<p>wordpress实现定时发布的原理，模拟了一套CRON API，位于/wp-includes/cron.php。程序上并没有真正每分钟都去扫描一次而是在有用户访问的时候才去检测是否到了触发的时间，如果满足触发条件就新发起一个http请求（这样异步的方式不会阻塞原来那次http访问），坏处就是如果完全没有人访问的话，定时就失效啦，而且比较难做到很准时除非每分每秒都有访问量。</p>
<p>为了搞明白wp-sns-share对于定时发布文章同步微博失效的原因，对着wordpress源码调试了很久，顺带着把这块源码摸熟了不少，搞清楚了Action事件这一套路，值得讲一讲。</p>
<p><span id="more-1322"></span></p>
<p>绑定Action的add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1)函数，第四个要注意下，很多Action事件不只一个参数的，这样参数设置好可以在自己的函数里少执行一些数据库操作。</p>
<p>下面列举一些wordpress发布文章中会调用的Action事件，按顺利为：</p>
<p>涉及到的属性值，$post为文章对象，ID为文章ID，文章对象的post_status属性、post_type属性。</p>
<ul>
<li><strong>pre_post_update</strong> : 参数1个（$post_ID）。只要文章已经存在（有了ID）就会被触发，在文章内容被保存前触发。<strong><br />
</strong></li>
<li><strong>transition_post_status</strong> : 参数3个（$new_status, $old_status, $post）。比较通用的一个事件。</li>
<li><strong>{$old_status}_to_{$new_status} </strong>: 参数1个（$post）。比如<strong>future_to_publish</strong>事件可以很好地抓取定时文章发布，<strong>draft_to_publish</strong>事件则是普通文章发布的事件。</li>
<li><strong>{$new_status}_{$post-&gt;post_type} </strong>: 参数2个（$post-&gt;ID, $post）。比如众所周知的<strong>publish_post</strong>事件，这里的组合太多啦。</li>
<li><strong>edit_post </strong>: 参数2个（$post-&gt;ID, $post）。只要文章已经存在（有了ID）就会被触发。</li>
<li><strong>post_updated</strong> : 参数3个（$post_ID, $post_after, $post_before）。只要文章已经存在（有了ID）就会被触发。</li>
<li><strong>save_post</strong> : 参数2个（$post-&gt;ID, $post）。</li>
<li><strong>wp_insert_post</strong> : 参数2个（$post-&gt;ID, $post）。</li>
</ul>
<p>很清楚明了地可以发现，<strong>post_updated</strong>事件是最强大的最万能的，可以获取到最多的参数，包括文章修改前和修改后的所有内容；其次是 <strong>transition_post_status </strong>事件。而<strong>{$old_status}_to_{$new_status} </strong>和 <strong>{$new_status}_{$post-&gt;post_type} </strong>事件的针对性很强大，可以选择某一种特殊情况进行事件抓取。而<strong>edit_post </strong>、<strong>save_post</strong> 、<strong>wp_insert_post </strong>这3个事件就比较鸡肋，基本任何情况都会触发但却很难判断具体是哪种情况，建议不用。</p>
<p>发布、编辑文章的主要代码在/wp-includes/post.php里，主要函数wp_update_post、wp_insert_post等，可以好好看一下。</p>
<p>看源码是最靠谱的，而且也能学习到很多，wordpress的源码真心高深莫测！如果能把wordpress的源码全部看明白了，相信web设计和开发的能力就非常强大了。</p>
<h4  class="related_post_title">看看 Action事件 , 事件驱动</h4><ul class="related_post"><li>2013-05-19 -- <a target="_blank" href="http://blog.11034.org/2013-05/tomcat6.html" title="Tomcat6源码学习">Tomcat6源码学习</a></li></ul><h4 class="related_post_title">看看 Wordpress </h4><ul class="related_post"><li>2014-03-12 -- <a target="_blank" href="http://blog.11034.org/2014-03/new_url_to_template.html" title="wordpress改源码实现自定义URL到自定义页面">wordpress改源码实现自定义URL到自定义页面</a></li><li>2013-12-05 -- <a target="_blank" href="http://blog.11034.org/2013-12/wp-sns-share_2-8.html" title="wp_sns_share更新至2.8，添加小功能">wp_sns_share更新至2.8，添加小功能</a></li><li>2013-02-14 -- <a target="_blank" href="http://blog.11034.org/2013-02/wp_zjuem_in_wordpress.html" title="wp-zjuem，zju cc98表情系统 in wordpress">wp-zjuem，zju cc98表情系统 in wordpress</a></li><li>2012-08-29 -- <a target="_blank" href="http://blog.11034.org/2012-08/wp-sns-share_2-6.html" title="wp_sns_share更新至2.6，增加图片同步">wp_sns_share更新至2.6，增加图片同步</a></li><li>2012-08-16 -- <a target="_blank" href="http://blog.11034.org/2012-08/fuck_renren.html" title="吐槽人人开放平台">吐槽人人开放平台</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2012-09/wordpress_post_actions.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
