diff --git a/core/um-actions-user.php b/core/um-actions-user.php index 74aa43c8..a4b29f1f 100644 --- a/core/um-actions-user.php +++ b/core/um-actions-user.php @@ -6,14 +6,35 @@ add_action('um_after_user_role_is_updated','um_setup_synced_wp_role', 50, 2); function um_setup_synced_wp_role( $user_id, $role ) { global $ultimatemember; + $meta = $ultimatemember->query->role_data( $role ); - $meta = apply_filters('um_user_permissions_filter', $meta, $user_id); + $meta = apply_filters('um_user_permissions_filter', $meta, $user_id ); + $wp_user_object = new WP_User( $user_id ); + if ( isset( $meta['synced_role'] ) && $meta['synced_role'] ) { - $wp_user_object = new WP_User( $user_id ); - $wp_user_object->set_role( $meta['synced_role'] ); + $wp_user_object->add_role( $meta['synced_role'] ); + }elseif( ! $wp_user_object->roles ) { // Fallback user default role if nothing set + $wp_user_object->add_role( 'subscriber' ); } } + /*** + *** @remove previously synced WP role + ***/ + add_action('um_when_role_is_set', 'um_remove_prev_synced_wp_role'); + function um_remove_prev_synced_wp_role( $user_id ) { + global $ultimatemember; + + um_fetch_user( $user_id ); + $role = um_user('role'); + $meta = $ultimatemember->query->role_data( $role ); + if ( isset( $meta['synced_role'] ) && $meta['synced_role'] ) { + $wp_user_object = new WP_User( $user_id ); + $wp_user_object->remove_role( $meta['synced_role'] ); + } + } + + /*** *** @after user uploads, clean up uploads dir ***/