为什么发布预定的帖子时Comments_Open()返回FALSE?

时间:2016-11-25 作者:DeltaHF

每当发布帖子并为该帖子启用评论时,我的插件都会做一些事情。正常发布帖子时效果很好,但如果发布了预定帖子,则不会。

下面是我的代码:

function do_stuff( $new_status, $old_status, $post ) {
    global $post;

    if ( !comments_open( $post->ID ) ) {
        return;
    }

    /* do stuff */
}
add_action( \'transition_post_status\', \'do_stuff\', 10, 3 );
经过一些调试,我惊讶地发现问题是comments_open() 正在返回FALSE, 无论“允许评论”设置如何,每次发布预定帖子时。

为什么会这样?

1 个回复
最合适的回答,由SO网友:DeltaHF 整理而成

该问题是由于引用global $post 对象这个global $post 尚未使用新帖子的详细信息初始化,因此检查其评论是否打开时,在transition_post_status

这个$post 传递给my的变量do_stuff() 函数确实包含了关于我新帖子的所有正确信息,所以我使用它。最终,我得到了如下内容,这些内容在常规和计划的帖子中都能正常运行:

function do_stuff( $new_status, $old_status, $post ) {
   if ( $post->comment_status == \'closed\' ) {
     return;
   }

   /* do stuff */
}
add_action( \'transition_post_status\', \'do_stuff\', 10, 3 );

相关推荐