I create a single page website and use only anchors (#) on main menu items.
Now, I need to include a second page on the website and keep the same menu.
I’m using roots theme. Then, I’m building menu using:
wp_nav_menu(array('theme_location' => 'primary_navigation'));
But how to change items url from, for example, #contact to mywebsite.com.br/#contact only on this second page?
In your template you can check whether you’re on the front-page or not and then echo out a different menu.
For example:
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:
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
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.
If your menu contains custom anchor-links AND page-links (e.g. to that second page, home, imprint or whatever) gdaniels change_menu function will break those page-links when you’re not on the front page.
That’s the problem boywonder was experiencing as the ‘change_menu’ function prepends the site-url to all menu-links. But with boywonders function ‘lb_menu_anchors’ you’ll end up with page refreshes on the front-page when switching between anchor-links. To avoid this, lb_menu_anchors must only be executed when the current page is not the front page:
Thanks for all your thoughts
I’d been using a modified version of gdaniel’s solution, but recently ran into an issue where, when using custom menu links to point menu items to external links, the site URL was prepended to the external link.
The code below should work if you need to modify anchor links and not modify external links.
All props go to laubsterboy and faye:
https://laubsterboy.com/blog/2014/09/wordpress-menu-anchor/
https://laubsterboy.com/blog/2014/09/wordpress-menu-anchor/#comment-35170