How can I organise loading levels?

I’m trying to work out how best to set out my game’s menu/level system. I currently start with an empty level which uses my HUD to draw a UI so I can select certain levels. What I need is a way to load the different maps while still holding onto the current game’s data.

So I click New Game->Location One->Loads map of location one.

However, when I use the GetWorld()->Travel functions it resets my game’s data and I just get splash screens and menus again. Is there a specific approach here and what can I use (travel functions, ULevel?), I’m struggling to find one as the documentation seems down at the minute.

So I found that

UGameplayStatics::OpenLevel(GetWorld(), "SomeMap", 0, "");

seems to do what I needed to load another level. However, I have the user create some settings that will be used within the game and when I go to this new level, them settings are reset to default/constructor values. Is there a specific method such as global persistent variables which can be used to be kept across level changes, or do we need to save/load data when moving between levels?