diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 09941a2f..32e73193 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -1122,9 +1122,25 @@ if ( ! class_exists( 'User' ) ) { } } - // update user if ( count( $args ) > 1 ) { + global $wp_roles; + $um_roles = get_option( 'um_roles' ); + + if ( ! empty( $um_roles ) ) { + $role_keys = array_map( function( $item ) { + return 'um_' . $item; + }, get_option( 'um_roles' ) ); + } else { + $role_keys = array(); + } + + $exclude_roles = array_diff( array_keys( $wp_roles->roles ), array_merge( $role_keys, array( 'subscriber' ) ) ); + + if ( in_array( $args['role'], $exclude_roles ) ) { + unset($args['role']); + } + wp_update_user( $args ); }