【问题标题】:How to restrict Subscriber to one custom post type and restraint them from editing other post如何将订阅者限制为一种自定义帖子类型并限制他们编辑其他帖子
【发布时间】:2014-11-06 22:32:36
【问题描述】:

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

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

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

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

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

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

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

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    $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) 制作的自定义帖子类型中有一堆自定义字段,因此我将媒体上传限制为仅本地帖子,因此我的投稿人无法使用其他人的媒体。

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

    【讨论】:

      猜你喜欢
      • 2023-01-19
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多