wordpress / latest / classes / wp_user / set_role.html

WP_User::set_role( string $role )

Sets the role of the user.

Description

This will remove the previous roles of the user and assign the user the new one. You can set the role to an empty string and it will remove all of the roles from the user.

Parameters

$role string Required
Role name.

Source

File: wp-includes/class-wp-user.php. View all references

public function set_role( $role ) {
	if ( 1 === count( $this->roles ) && current( $this->roles ) == $role ) {
		return;
	}

	foreach ( (array) $this->roles as $oldrole ) {
		unset( $this->caps[ $oldrole ] );
	}

	$old_roles = $this->roles;

	if ( ! empty( $role ) ) {
		$this->caps[ $role ] = true;
		$this->roles         = array( $role => true );
	} else {
		$this->roles = array();
	}

	update_user_meta( $this->ID, $this->cap_key, $this->caps );
	$this->get_role_caps();
	$this->update_user_level_from_caps();

	foreach ( $old_roles as $old_role ) {
		if ( ! $old_role || $old_role === $role ) {
			continue;
		}

		/** This action is documented in wp-includes/class-wp-user.php */
		do_action( 'remove_user_role', $this->ID, $old_role );
	}

	if ( $role && ! in_array( $role, $old_roles, true ) ) {
		/** This action is documented in wp-includes/class-wp-user.php */
		do_action( 'add_user_role', $this->ID, $role );
	}

	/**
	 * Fires after the user's role has changed.
	 *
	 * @since 2.9.0
	 * @since 3.6.0 Added $old_roles to include an array of the user's previous roles.
	 *
	 * @param int      $user_id   The user ID.
	 * @param string   $role      The new role.
	 * @param string[] $old_roles An array of the user's previous roles.
	 */
	do_action( 'set_user_role', $this->ID, $role, $old_roles );
}

Hooks

Uses

Uses Description

Changelog

Version Description
2.0.0 Introduced.

© 2003–2022 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/classes/wp_user/set_role