對於一個多作者的`Wordpress`網站,我們有時候需要限製作者能夠接觸到的編輯選項,例如給文章加標籤,或者禁用某些插件的選項。
這個時候我們需要用到do_meta_boxes
或者admin_menu
這兩個hooks
。注意,如果要移除插件生成的meta boxes
,我們必須要使用do_meta_boxes
而非admin_menu
,因爲後者觸發得太早了。
好了,假設我們要給所有非admin
或subadmin
(自定義權限角色)用戶禁用標籤
的meta box
,那麼在functions.php
裏,我們需要添加以下代碼:
/**
* Function to remove the tag meta box from post-editing page for users other than admins and subadmins
*/
function remove_meta_boxes()
{
if (!current_user_can('administrator') && !current_user_can('subadmin'))
{
remove_meta_box('tagsdiv-post_tag', 'post', 'side');
}
}
add_action('do_meta_boxes', 'remove_meta_boxes');
可以看到,我們使用了remove_meta_box
這個自帶函數來去除meta box
。要注意的是第三個參數,指的是這個meta box
的在屏幕上的顯示位置,有normal
, side
和advanced
三種選項,這裏我們的tag box
位於最右邊,所以我們用了side
。
函數具體的參數及使用方法,可以參見:
https://codex.wordpress.org/Function_Reference/remove_meta_box
其中常見的可以移除的meta boxes
的id
如下:
'authordiv' – Author metabox
'categorydiv' – Categories metabox.
'commentstatusdiv' – Comments status metabox (discussion)
'commentsdiv' – Comments metabox
'formatdiv' – Formats metabox
'pageparentdiv' – Attributes metabox
'postcustom' – Custom fields metabox
'postexcerpt' – Excerpt metabox
'postimagediv' – Featured image metabox
'revisionsdiv' – Revisions metabox
'slugdiv' – Slug metabox
'submitdiv' – Date, status, and update/save metabox
'tagsdiv-post_tag' – Tags metabox
'tagsdiv-{$tax-name}' - Custom taxonomies metabox
'{$tax-name}div' - Hierarchical custom taxonomies metabox
'trackbacksdiv' – Trackbacks metabox
...
那如果我們需要修改某個meta box
的標題呢?最好的辦法就是先用remove_meta_box
這個函數把原有的box
去掉,然後再插入一個同樣的box
,只是將title
替換成了我們需要的標題:
function remove_meta_boxes()
{
if (!current_user_can('administrator') && !current_user_can('subadmin'))
{
remove_meta_box('tagsdiv-post_tag', 'post', 'side');
remove_meta_box('postimagediv', 'post', 'side');
add_meta_box('postimagediv', '縮略圖片', 'post_thumbnail_meta_box', 'post', 'side', 'high');
}
}
add_action('do_meta_boxes', 'remove_meta_boxes');
具體的函數使用請參考:
https://developer.wordpress.org/reference/functions/add_meta_box/