在带有publish_{post_type}
(http://codex.wordpress.org/Post_Status_Transitions)的WordPress中,如果发布了自定义类型的帖子,则可以挂钩循环。但是如果更新帖子,publish_{post_type}
也会触发。
我基本上正在寻找一种方法来检查publish_post_type
钩子内的旧状态和新状态。有没有人对如何做到这一点有一个很好的想法?
我这样做:
function doStuff( $post_ID ) {
// do stuff
return $post_ID;
}
add_action( 'publish_ttplaned', 'doStuff' );
所以基本上我需要在功能doStuff()中检查帖子的新旧状态。
答案 0 :(得分:1)
如果其他人正在寻找答案。我最终使用威廉斯解决方案。
add_action( 'draft_to_publish', 'doStuff', 10, 1 );
add_action( 'pending_to_publish', 'doStuff', 10, 1 );
function doStuff( $post ) {
if ( get_post_type( $post ) == "my_custom_post_type" ){
// do stuff
}
}
这是有效的,因为即使您立即发布新帖子,也会以草稿开始。
答案 1 :(得分:0)
正如@rnevius所说,WordPress核心中没有名为publish_post_type
的钩子。
还有publish_post
- 我刚刚对其进行了测试,以确保它仅在帖子首次发布时运行,而不是在随后进行编辑时运行。
所以你可以这样做:
function my_function($post_ID, $post) {
if ("foo" == $post->post_type) {
// do something
}
}
add_action( 'publish_post', 'my_function', 10, 2 );
还有wp_transition_post_status()
,它会调用多个操作:
transition_post_status
与$new_status
,$old_status
,$post
或者,如果你想以相反的方式做到这一点:
{$old_status}_to_{$new_status}
并传递WP_Post
个对象作为唯一参数。