WordPress最好的部分之一是它的钩子/动作系统。
这个特殊的钩子系统是WordPress在某些事件发生时分配回调的方法。有一个似乎很混乱的事件是,当一个post被首次发布时,应该使用哪个钩子来检测它。
这里有publish_post钩子,但当你在一个文章已经发布后点击”更新”按钮时也会触发。
如果我们需要仅当发布文章触发的回调,又该如何处理呢?
使用transition_post_status
浏览一下WordPress文档和论坛,你肯定会看到一打解决方案,但没有一个能像transition_post_status钩子一样工作:
// Add the hook action
add_action('transition_post_status', 'send_new_post', 10, 3);
// Listen for publishing of a new post
function send_new_post($new_status, $old_status, $post) {
if('publish' === $new_status && 'publish' !== $old_status && $post->post_type === 'post') {
// Do something!
}
}
当post从一种状态转换到另一种状态时,会发生transition_post_status。
你还可以可以通过post状态来进行不同的处理。我还添加了一个post_type检查,以确保文章是一篇博客文章,而不是一个页面。
希望可以帮助到刚接触wordpress钩子的朋友。