阻止作者角色的用户编辑已挂起的帖子

时间:2015-04-10 作者:AdamJones

我想阻止作者不断编辑那些已经等待编辑审查的帖子。

澄清;我已经在我的主题中有了代码,可以将实时帖子设置为挂起状态,而且效果很好。。。

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角色功能的理解中获得的。

1 个回复
最合适的回答,由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。

结束

相关推荐

PHP致命错误:无法为wp-includes/capabilities.php中的非对象调用重载函数

我在apache日志中遇到了太多以下错误。PHP Fatal error: Cannot call overloaded function for non-object in wp-includes/capabilities.php on line 1187这是函数current\\u user\\u can($capability)的内部,第1187行如下所示:$current_user = wp_get_current_user(); 我不知道问题出在哪里?