In your template you can check whether you’re on the front-page or not and then echo out a different menu.
For example:
if(is_front_page() || is_home()){
wp_nav_menu(array('theme_location' => 'primary_navigation'));
}else{
wp_nav_menu(array('theme_location' => 'secondary_navigation'));
}
You would also have to register a second menu locations in the functions.php file (if it hasn’t been done yet).
To register a new menu location:
function register_my_menus() {
register_nav_menus(array(
'secondary-location' => __('Secondary Location'),
));
}
add_action( 'init', 'register_my_menus' );
The downside is that you would have to manage two menus in the backend. That could be a problem if the menu changes often, because you would have to update two menus.
Instead, you could filter the wp_nav_menu and alter the url before the menu is printed. For example, this would go in functions.php
function change_menu($items){
if(!is_front_page()){
foreach($items as $item){
$item->url = get_bloginfo("url") . "https://wordpress.stackexchange.com/" . $item->url;
}
}
return $items;
}
add_filter('wp_nav_menu_objects', 'change_menu');
the code above filters the wp_nav_menu_object. It adds the full url if you’re not on the front-page of the website. Otherwise it just returns the regular menu. Using this method you would not have to create a second menu in the admin.