update_core
update_plugins
update_themes
install_plugins
install_themes
delete_themes
edit_plugins
edit_themes
こんにちは、私はこれらの機能をuser_id = 1に制限したいので、他のスーパー管理者はネットワークファイルを編集できません。 (ところで、足りない場合はお知らせください)。これの正しい方法は何ですか?試しました http://wordpress.org/extend/plugins/extended-super-admins/ しかし、すべてのブログに 'manage_esa_options'の上限が追加されたため、super_adminは管理バーにたくさんのブログを表示します。
スーパー管理者機能の編集は、他のすべてのロールの機能の編集とは少し異なります。これは、WPが現在のユーザーの機能をチェックする方法に若干の迂回があるためです。これが864行目のcapabilities.php
にあります。
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_not_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;
}
私はこれをテストしました、そしてそれはあなたが防ぐことを望むそれらのことをすることから追加のスーパー管理者をブロックするようです、そしてそれはかなり静かにそうします(すなわちそれらをネットワークダッシュボードにリダイレクトします)。
記録に関しては、私の前の答えは、ほとんどの場合にうまくいくでしょう あなたが求めていたものを除いて 。謝罪いたします :)
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);
}
}
}
}