/** * readjust user object to keep the role - pack balance */ function mgm_remove_excess_user_roles($user_id, $add_if_absent = false) { $member = mgm_get_member($user_id); $user = new WP_User($user_id); $pack_ids = mgm_get_members_packids($member); $pack_roles = array(); $obj_role = new mgm_roles(); foreach ($pack_ids as $pack_id) { $pack = mgm_get_class('subscription_packs')->get_pack($pack_id); if (!empty($pack['role'])) { $pack_roles[] = $pack['role']; } } //remove from user object: if (isset($user->roles) && !empty($user->roles) && !empty($pack_roles)) { $arr_all_roles = $obj_role->_get_default_roles(); $arr_mgm_roles = $obj_role->_get_mgm_roles(); if (!empty($arr_mgm_roles)) { $arr_all_roles = array_merge($arr_all_roles, $arr_mgm_roles); } foreach ($user->roles as $role) { if (!in_array($role, $pack_roles)) { //make sure delete only default/mgm roles: if (in_array($role, $arr_all_roles)) { $user->remove_role($role); } } } } //add if role is absent: if (!empty($pack_roles) && $add_if_absent) { $user = new WP_User($user_id); foreach ($pack_roles as $prole) { if (!in_array($prole, $user->roles)) { $obj_role->add_user_role($user_id, $prole, false, false); } } } }