函数文档

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.

Return

bool True on success, false on failure. This can fail when the user’s email is the network admin email or when the $super_admins global is defined.

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.

Changelog

Version Description
6.9.0 Super admin privileges can be revoked regardless of email address.
3.0.0 Introduced.