在 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.