编辑超级管理员功能与编辑其他所有角色的功能略有不同,因为WP检查当前用户功能的方式有点迂回。这就是你在capabilities.php
第864行:
function has_cap( $cap ) {
// (...)
// Multisite super admin has all caps by definition, Unless specifically denied.
if ( is_multisite() && is_super_admin( $this->ID ) ) {
if ( in_array(\'do_not_allow\', $caps) )
return false;
return true;
}
这意味着我们必须将“do\\u not\\u allow”显式添加到包含要阻止的功能的数组中。实际上:
add_filter(\'map_meta_cap\', \'not_so_super_admins\', 10, 4);
function not_so_super_admins($caps, $cap, $user_id, $args){
$super = array(
\'update_core\',
\'update_plugins\',
\'update_themes\',
\'install_plugins\',
\'install_themes\',
\'delete_themes\',
\'edit_plugins\',
\'edit_themes\'
);
if($user_id != 1 && in_array($cap, $super)) {
$caps[] = \'do_not_allow\';
}
return $caps;
}
我已经对此进行了测试,它似乎阻止了其他超级管理员执行您想要阻止的操作,并且它会以相当安静的方式执行(即将他们重定向到网络仪表板)。
我之前的回答对大多数情况都适用except 你要的那个。抱歉:)
add_action(\'init\', \'not_so_super_admins\');
function not_so_super_admins() {
if(is_multisite() && $GLOBALS[\'blog_id\'] == 1) {
$role = get_role(\'administrator\');
$super = array(
\'update_core\',
\'update_plugins\',
\'update_themes\',
\'install_plugins\',
\'install_themes\',
\'delete_themes\',
\'edit_plugins\',
\'edit_themes\'
);
if(get_current_user_id() != 1) {
foreach($super as $cap) {
$role->remove_cap($cap);
}
}
else {
foreach($super as $cap) {
$role->add_cap($cap);
}
}
}
}