每当发布帖子并为该帖子启用评论时,我的插件都会做一些事情。正常发布帖子时效果很好,但如果发布了预定帖子,则不会。
下面是我的代码:
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
, 无论“允许评论”设置如何,每次发布预定帖子时。
为什么会这样?
最合适的回答,由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 );