wordpress自定义文章类型capability_type和capabilities参数说明

在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如果不具体设定的话,它的值会是:

  1. capabilities' => array(   
  2.     'edit_post' => 'edit_book',   
  3.     'edit_posts' => 'edit_books',   
  4.     'edit_others_posts' => 'edit_others_books',   
  5.     'publish_posts' => 'publish_books',   
  6.     'read_post' => 'read_book',   
  7.     'read_private_posts' => 'read_private_books',   
  8.     'delete_post' => 'delete_book',   
  9. )  

你也可以具体的来设置Capabilities参数,比如

  1. 'capabilities' => array(   
  2.     'read' => 'read_books',   
  3.     'edit_posts' => 'edit_published_books',   
  4.     'delete_posts' => 'delete_published_books',   
  5. ),  

注意的是,这里只是改变了capabilities的名称为edit_published_books,至于该权限对应的具体操作还是edit_books。

而你新添加了capabilities,而默认的角色中都没有这个权限(超级管理员也不行),所以得使用add_cap函数给具体的角色赋予你自定义的capabilities.

已有7条评论

brick进行回复 取消回复