当某一类型的用户尝试更新其帖子时,是否有一种有效的方法将帖子状态从“已发布”更改为“草稿”。我试过这样的方法
function change_post_status($post_id)
{
if(current_user_can(\'rolename\'))
{
$current_post = get_post( $post_id, \'ARRAY_A\' );
$current_post[\'post_status\'] = \'draft\';
wp_update_post($current_post);
}
}
add_action(\'pre_post_update\',\'change_post_status\');
代码在我看来很好,但由于某些原因,它不能正常工作,我认为它会创建一个无休止的循环(迫使我重新启动SQL server)。
SO网友:Asped
我想再补充一个问题。当你使用上面的代码时,每一篇文章都会发生这种情况,如果你在后端进行更新的话!因为每次更新帖子时都会触发wp\\U insert\\U post\\U数据,所以如果管理员想要发布帖子,它也会自动再次触发,并将帖子设置为草稿。所以再也不可能发布列表了。这里是一个对我有用的修改代码,请检查我们是否在管理后端:
function change_post_status( $data, $postarr ) {
$data[ \'post_status\' ] = \'draft\';
return $data;
}
if (!(is_admin())) {
add_filter( \'wp_insert_post_data\' , \'change_post_status\' , \'99\', 2 );
}