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