0

嗨,我正在尝试为 wordpress 网站创建一个自定义部分,我需要为我的订阅者提供一些访问权限。

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

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

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

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

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

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

在此先感谢您的帮助。

4

1 回答 1

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);

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

这个隐藏了我不想让投稿人看到的菜单

来源:来源 1 和:来源 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;
        }
    }
}

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

add_action('admin_init', 'allow_contributor_uploads');

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

由于我使用ACF(高级自定义字段)制作的自定义帖子类型中有一堆自定义字段,因此我将媒体上传限制为仅本地帖子,因此我的投稿人无法使用其他人的媒体。

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

于 2014-09-12T18:10:52.200 回答