Ändern Sie die Menüelement-URL

Ich erstelle eine einzelne Seite und verwende nur Anker (#) auf Hauptmenüpunkten.

Jetzt muss ich eine zweite Seite auf der Website hinzufügen und das gleiche Menü beibehalten.

Ich benutze roots theme. Dann erstelle ich ein Menü mit:

wp_nav_menu(array('theme_location' => 'primary_navigation')); 

Aber wie ändert man die Artikel-URL von #contact auf mywebsite.com.br/#contact nur auf dieser zweiten Seite?

Solutions Collecting From Web of "Ändern Sie die Menüelement-URL"

In Ihrer Vorlage können Sie prüfen, ob Sie sich auf der Startseite befinden oder nicht und dann ein anderes Menü ausgeben.

Beispielsweise:

 if(is_front_page() || is_home()){ wp_nav_menu(array('theme_location' => 'primary_navigation')); }else{ wp_nav_menu(array('theme_location' => 'secondary_navigation')); } 

Außerdem müssen Sie in der Datei functions.php weitere Speicherorte für das Menü registrieren (falls noch nicht geschehen).

So registrieren Sie einen neuen Menüpfad:

 function register_my_menus() { register_nav_menus(array( 'secondary-location' => __('Secondary Location'), )); } add_action( 'init', 'register_my_menus' ); 

Der Nachteil ist, dass Sie zwei Menüs im Backend verwalten müssen. Das kann ein Problem sein, wenn sich das Menü häufig ändert, weil Sie zwei Menüs aktualisieren müssen.

Stattdessen könnten Sie das wp_nav_menu filtern und die URL ändern, bevor das Menü gedruckt wird. Zum Beispiel würde dies in functions.php gehen

 function change_menu($items){ if(!is_front_page()){ foreach($items as $item){ $item->url = get_bloginfo("url") . "/" . $item->url; } } return $items; } add_filter('wp_nav_menu_objects', 'change_menu'); 

Der obige Code filtert das wp_nav_menu_object. Es fügt die vollständige URL hinzu, wenn Sie nicht auf der Startseite der Website sind. Andernfalls wird nur das normale Menü zurückgegeben. Mit dieser Methode müssten Sie kein zweites Menü im Admin erstellen.

Ich hatte eine modifizierte Version von gdaniels Lösung verwendet, stieß aber kürzlich auf ein Problem, bei dem bei der Verwendung benutzerdefinierter Menüverknüpfungen zum Zeigen von Menüelementen auf externe Links die Website-URL dem externen Link vorangestellt wurde.

Der folgende Code sollte funktionieren, wenn Sie Anker-Links ändern und externe Links nicht ändern müssen.

 function lb_menu_anchors($items, $args) { foreach ($items as $key => $item) { if ($item->object == 'custom' && substr($item->url, 0, 1) == '#') { $item->url = site_url() . $item->url; } } return $items; } add_filter('wp_nav_menu_objects', 'lb_menu_anchors', 10, 2); 

Alle Requisiten gehen an lautsterboy und faye: https://laubsterboy.com/blog/2014/09/wordpress-menu-anchor/ https://laubsterboy.com/blog/2014/09/wordpress-menu-anchor/#comment -35170