WordPress:提交帖子检查是否更新帖子

时间:2015-04-17 09:28:10

标签: wordpress

在带有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()中检查帖子的新旧状态。

2 个答案:

答案 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个对象作为唯一参数。