我想阻止作者不断编辑那些已经等待编辑审查的帖子。
澄清;我已经在我的主题中有了代码,可以将实时帖子设置为挂起状态,而且效果很好。。。
function published_to_pending($post_id) {
global $post;
if (!is_object($post)) {
return;
}
if (get_current_user_role()=="author" && get_post_type()=="custompost" && $post->post_status==\'publish\') {
// stop recursion call
remove_action(\'save_post\', \'published_to_pending\');
// update the post, which calls save_post again
wp_update_post(array(\'ID\' => $post_id, \'post_status\' => \'pending\'));
// re-hook this function back
add_action(\'save_post\', \'published_to_pending\');
}
}
add_action(\'save_post\', \'published_to_pending\');
我发现了一些与我想在这里做的非常相似的事情:
Allow Editors to edit pending posts but not draft ones 但无论我如何修改代码,我都无法让它在我自己的网站上产生任何效果。
有没有人知道如何实现这一点,因为我很有信心这是从我看到的其他代码示例以及我对WordPress角色功能的理解中获得的。
最合适的回答,由SO网友:AdamJones 整理而成
我通过“content\\u edit\\u pre”WP挂钩添加检查来解决这个问题。我快速检查帖子的状态,如果已经挂起,我会将用户返回到帖子列表页面,然后显示一个错误。
// Redirect edit post page back to the list page when pending
add_action( \'content_edit_pre\', \'my_check_status_before_editing\');
function my_check_status_before_editing( $content, $post_id) {
global $post;
if( $post->post_type=="custom-post-type" && get_current_user_role()=="custom-user-type" ){
if ($post->post_status=="pending" ){
wp_redirect("edit.php?post_type=apartments&msg=101");
exit;
}
}
return $content;
}
function get_current_user_role() {
global $wp_roles;
$current_user = wp_get_current_user();
$roles = $current_user->roles;
$role = array_shift($roles);
return $role;
}
加载列表页面时,我有其他代码来检查是否有“msg”url参数,然后通过admin\\u notices挂钩显示适当的msg。