在 WordPress 中关于用户权限有三个词:Role 、 Capabilities 、 User Levels 分别是角色、权限、用户级别的意思,在前面后台制作教程中创建后台菜单的时候提到过有个参数是填写一个 Capabilities,但是很多人填写的是 role 喝 user levels 。
在 WordPress 中 role-角色很容易理解,就是管理员、订阅者之类的。对于用户层级,WordPress 将用户分成了从 0 到 10 共 11 级别,0 为最低,10 最高,管理员 Administrator 就是 10 级别的,具有最高权限,WordPress 默认只有 5 中角色,我们可以人为的添加一些角色,并给它某一级别的权限。
Capabilities 是具体的权限,比如:switch_themes-管理主题、 edit_themes 编辑主题、 edit_posts 发表文章。。等等。
在创建自定义文章类型的函数 register_post_type 中,capability_type 参数和上一篇教程的 public 参数类似,也是一个 「父级参数」 它的作用只是给 Capabilities 数组中没有人为具体赋值的参数赋值。
capability_type 的默认值是 post, 所以默认的对于该文章类型的各种权限跟 post 是一样的,也就是 edit_post 之类的,但是如果你想单独添加不同的 Capabilities, 比如你使用 register_post_type 添加了文章类型 book,我希望有的用户能编辑默认的文章,但是不能编辑 book,那就需要给 book 单独添加不同的权限-Capabilities 。那就应该具体的配置一下 capabilities 参数 (这个参数是数组) 。它的默认值是
edit_post
: 是否能创建和编辑一个具体的文章edit_posts
: Capability that allows editing posts of this post type. 是否允许编辑该文章类型的文章edit_others_posts
: 是否允许编辑别人发布的文章publish_posts
: Capability to grant publishing of these types of posts. 是否允许发布文章read_post
: Capability that controls reading of a specific post of this post type.read_private_posts
: Capability to allow reading of private posts. 是否能阅读私有文章delete_post
: Capability that grants the privelege of deleting posts. 是否能删除文章。
要具体配置权限,先将 capability_type 设置成 book, 那么 WordPress 将自动给这个文章类型添加权限种类,比如 edit_post 就会对应添加一个 edit_book, 而 Capabilities 如果不具体设定的话,它的值会是:
- capabilities' => array(
- 'edit_post' => 'edit_book',
- 'edit_posts' => 'edit_books',
- 'edit_others_posts' => 'edit_others_books',
- 'publish_posts' => 'publish_books',
- 'read_post' => 'read_book',
- 'read_private_posts' => 'read_private_books',
- 'delete_post' => 'delete_book',
- )
你也可以具体的来设置 Capabilities 参数,比如
- 'capabilities' => array(
- 'read' => 'read_books',
- 'edit_posts' => 'edit_published_books',
- 'delete_posts' => 'delete_published_books',
- ),
注意的是,这里只是改变了 capabilities 的名称为 edit_published_books,至于该权限对应的具体操作还是 edit_books 。
而你新添加了 capabilities,而默认的角色中都没有这个权限 (超级管理员也不行),所以得使用 add_cap 函数给具体的角色赋予你自定义的 capabilities.