revoke_super_admin()
云策文档标注
概述
revoke_super_admin() 函数用于在多站点环境中撤销指定用户的超级管理员权限。它通过操作 site_admins 选项来实现权限移除,并包含相关钩子和错误处理。
关键要点
- 参数:$user_id(整数,必需),指定要撤销权限的用户ID。
- 返回值:成功时返回 true,失败时返回 false。失败可能因用户邮箱是网络管理员邮箱或 $super_admins 全局变量已定义。
- 功能:仅在多站点环境下有效,若 $super_admins 全局变量已定义或非多站点则直接返回 false。
- 钩子:提供 revoke_super_admin(撤销前)和 revoked_super_admin(撤销后)两个动作钩子。
- 相关函数:涉及 get_site_option()、get_userdata()、update_site_option() 等核心函数。
代码示例
function revoke_super_admin( $user_id ) {
// If global super_admins override is defined, there is nothing to do here.
if ( isset( $GLOBALS['super_admins'] ) || ! is_multisite() ) {
return false;
}
do_action( 'revoke_super_admin', $user_id );
$super_admins = get_site_option( 'site_admins', array( 'admin' ) );
$user = get_userdata( $user_id );
if ( $user ) {
$key = array_search( $user->user_login, $super_admins, true );
if ( false !== $key ) {
unset( $super_admins[ $key ] );
update_site_option( 'site_admins', $super_admins );
do_action( 'revoked_super_admin', $user_id );
return true;
}
}
return false;
}注意事项
- 从 WordPress 6.9.0 版本起,撤销超级管理员权限不再受邮箱地址限制。
- 此函数自 WordPress 3.0.0 版本引入,适用于多站点管理场景。
原文内容
Revokes Super Admin privileges.
Parameters
$user_idintrequired-
ID of the user Super Admin privileges to be revoked from.
Source
function revoke_super_admin( $user_id ) {
// If global super_admins override is defined, there is nothing to do here.
if ( isset( $GLOBALS['super_admins'] ) || ! is_multisite() ) {
return false;
}
/**
* Fires before the user's Super Admin privileges are revoked.
*
* @since 3.0.0
*
* @param int $user_id ID of the user Super Admin privileges are being revoked from.
*/
do_action( 'revoke_super_admin', $user_id );
// Directly fetch site_admins instead of using get_super_admins().
$super_admins = get_site_option( 'site_admins', array( 'admin' ) );
$user = get_userdata( $user_id );
if ( $user ) {
$key = array_search( $user->user_login, $super_admins, true );
if ( false !== $key ) {
unset( $super_admins[ $key ] );
update_site_option( 'site_admins', $super_admins );
/**
* Fires after the user's Super Admin privileges are revoked.
*
* @since 3.0.0
*
* @param int $user_id ID of the user Super Admin privileges were revoked from.
*/
do_action( 'revoked_super_admin', $user_id );
return true;
}
}
return false;
}
Hooks
- do_action( ‘revoked_super_admin’, int $user_id )
-
Fires after the user’s Super Admin privileges are revoked.
- do_action( ‘revoke_super_admin’, int $user_id )
-
Fires before the user’s Super Admin privileges are revoked.