WordPress 的文章類型把不同的內容區(qū)分為了不同的內容對象,方便我們在后臺進行管理。一些用戶在前端提交的內容,也可以直接寫入到某個文章類型中,然后在后臺進行維護管理,這時候,我們可能需要禁止管理員在后臺新建內容,以確保這些內容都是用戶在前端提交的。我們可以禁用掉用戶在后臺新建某個文章類型內容的功能,下面是兩種實現方法。
創(chuàng)建文章類型的時候,直接禁用
使用 register_post_type 新建文章類型的時候,WordPress 為我們直接設置文章類型的 create_posts 權限為 ‘do_not_allow’,加上了這個參數之后,新創(chuàng)建的文件類型直接就沒有新建內容的菜單和按鈕了。
register_post_type( 'custom_post_type_name', array(
'capability_type' => 'post',
'capabilities' => array(
'create_posts' => 'do_not_allow', // 移除 "新建" 功能
),
'map_meta_cap' => true, // 如果不用許用戶修改/刪除文章,設置為 `false`
));
如果我們需要針對某個角色的用戶開啟創(chuàng)建文章的權限,我們可以設置 create_posts 的值為該角色的名稱,如 ‘administrator’。
創(chuàng)建文章類型后禁用
有時候,我們的目標文章類型是通過插件事先創(chuàng)建好的,這時候,去修改主題或插件中的相關代碼是不明智的,因為插件一旦更新,我們所做的修改就被覆蓋掉了,還得重新來一遍。各種情況下,我們可以通過 WordPress 的 Action 來修改目標文章類型的權限,如下,在 WordPress 初始化的時候,我們設置 “文章” 文章類型的新建文章權限為 “do_not_allow”,同樣可以去掉創(chuàng)建文章類型的權限。
add_action('init',function () {
global $wp_post_types;
$wp_post_types['post']->cap->create_posts = 'do_not_allow';
});
除此之外,我們還可以通過隱藏新建文章的后臺菜單來實現禁止用戶新建文章的功能,不過這種方法是不安全的,如果用戶知道了新建文章的 URL 地址,可以直接在瀏覽器中輸入該地址打開新建文章的頁面,所以不推薦這種方法。最保險的辦法是采用本文中介紹的兩種方法的任意一種。


