Change menu items URL

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.