如何将订阅者限制为一个自定义帖子类型并限制他们编辑其他帖子

时间:2014-09-12 17:13:54

标签: php wordpress permissions custom-post-type subscriber

您好我正在尝试为wordpress网站制作自定义部分,我需要为我的订阅者提供一些访问权限。

我创建了一个自定义帖子类型(船)。我需要做的是:

1 - 授予对我的自定义帖子类型的任何订阅者的访问权限。

2 - 授予任何订阅者仅在他们自己的帖子中发布/编辑/删除/上传文件的权限(+允许将他们的帖子分配给我已经创建的分类之一)

3 - 限制他们查看/编辑其他订阅者

4 - 我不希望订阅者看到除了他们的个人资料和自定义帖子类型部分之外的其他内容

我尝试使用角色scoper,wp-Members和Capability Manager,但它们似乎都没有完全符合我的要求。如果你知道怎么做,我真的很感激

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

以下是我所做的,而不是授予订阅者所有这些权限,我将所有订阅者升级为贡献者。

我将自定义帖子类型的功能更改为:

$args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'boat' ),
        'capability_type'    => 'post',
        'capabilities'       => array(
                                'publish_posts'       => 'edit_posts',//contributor can edit
                                'edit_others_posts'   => 'update_core',//administrator can see other
                                'delete_posts'        => 'update_core',//administrator can see other
                                'delete_others_posts' => 'update_core',//administrator can see other
                                'read_private_posts'  => 'update_core',//administrator can see other
                                'edit_post'           => 'edit_posts',//contributor can edit
                                'delete_post'         => 'update_core',//administrator can see other
                                'read_post'           => 'edit_posts',//contributor can edit
                                ),
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title','revision' )
);

register_post_type("boat", $args);

然后我添加了一些我在不同网页上找到的自定义功能:

这个隐藏菜单我不希望贡献者看到

来源:source 1 并且:source 2

function remove_menus(){

  $author = wp_get_current_user();
  if(isset($author->roles[0])){ 
     $current_role = $author->roles[0];
  }else{
     $current_role = 'no_role';
  }

  if($current_role == 'contributor'){  
     remove_menu_page( 'index.php' );                  //Dashboard
     remove_menu_page( 'edit.php' );                   //Posts
     remove_menu_page( 'upload.php' );                 //Media
     remove_menu_page( 'tools.php' );                  //Tools
     remove_menu_page( 'edit-comments.php' );               //Comments
     remove_menu_page( 'edit.php?post_type=my_other_custom_post_type_I_want_to_hide' );
  }

}
add_action( 'admin_menu', 'remove_menus' );

然后我限制了其他帖子的撰稿人: 来自:source 3

add_action( 'load-edit.php', 'posts_for_current_contributor' );
function posts_for_current_contributor() {
    global $user_ID;

    if ( current_user_can( 'contributor' ) ) {
        if ( ! isset( $_GET['author'] ) ) {
            wp_redirect( add_query_arg( 'author', $user_ID ) );
            exit;
        }
    }
}

最后我允许贡献者上传文件: 来自source 4

add_action('admin_init', 'allow_contributor_uploads');

function allow_contributor_uploads() {
    $contributor = get_role('contributor');
    $contributor->add_cap('upload_files');
}

由于我在ACF (Advance custom field)制作的自定义帖子类型中收到了大量自定义字段,因此我将媒体上传限制为仅限本地帖子,因此我的撰稿人无法使用其他人的媒体。

我希望这会对某人有所帮助! :)