wp_nav_menu() - Falsches Menü wird angezeigt

  • Hallo,

    ich habe ein echt merkwürdiges Problem, dass mich schon einige Stunden Suche gekostet hat.

    Ich möchte in einem Theme die neue wp_nav_menu() Function nutzen.
    Dazu habe ich in der functions.php die Menüs 'nav_header' und 'nav_footer' registriert:

    PHP
    //functions.php
    function hyportal_register_menus() {
        register_nav_menus(array(
            'nav_header' => 'Navigation im Header',
            'nav_footer' => 'Navigation im Footer',
        ));
    }
    add_action('init', 'hyportal_register_menus');

    Als nächstes habe ich in der header.php das wp_nav_menu() eingefügt:

    PHP
    <div id="nav" class="menu">
            <?php wp_nav_menu(array('menu' => 'nav_header', 'container' => 'ul', 'menu_class' => 'nav')); ?>
    </div>

    Und in der footer.php ebenfalls:

    PHP
    <div id="wrap">
              <?php wp_nav_menu(array('menu' => 'nav_footer', 'container' => 'div', 'menu_class' => '', 'link_before' => ' | ')); ?>
    </div>

    Nachdem ich das hatte, habe ich im Admin-Bereich 2 Menüs angelegt und sie den Bereichen im Theme zugeordnet:

    Das Menü "Header Navigation" habe ich dem Bereich "Navigation im Header" und
    das Menü "Footer Navigation" habe ich dem Bereich "Navigation im Footer zugeordnet.

    Wenn ich mir nun das Ergebnis ansehe, wird im Header und im Footer das gleiche Menü "Header Navigation" angezeigt.

    Wenn ich das Menü "Header Navigation" lösche, wird im Header und Footer das Menü "Footer Navigation" angezeigt.

    Wenn ich beide Menüs lösche (also kein Menü mehr habe) wird wie zu erwarten die Fallback-Funktion wp_page_menu() verwendet.

    Warum wird im Header und Footer das gleiche Menü verwendet? Was habe ich übersehen? Ich hoffe, jemand kann mir helfen.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Hast du es mal nur mit wp_nav_menu() probiert:

    PHP
    <?php
        register_nav_menu( 'nav_header', 'Header Navigation Menu' );
        register_nav_menu( 'nav_footer', 'Footer Navigation Menu' );
    ?>
    PHP
    <?php wp_nav_menu( array( 'theme_location' => 'nav_header' .....
    PHP
    <?php wp_nav_menu( array( 'theme_location' => 'nav_footer' .....

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • Hast du es mal nur mit wp_nav_menu() probiert:

    PHP
    <?php
        register_nav_menu( 'nav_header', 'Header Navigation Menu' );
        register_nav_menu( 'nav_footer', 'Footer Navigation Menu' );
    ?>
    PHP
    <?php wp_nav_menu( array( 'theme_location' => 'nav_header' .....
    PHP
    <?php wp_nav_menu( array( 'theme_location' => 'nav_footer' .....

    Wenn ich register_nav_menu() statt register_nav_menus() verwende, ändert sich nichts.

    Wenn ich aber wp_nav_menu() mit 'theme_location' statt 'menu' verwende, wird sofort die Fallback-Funktion verwendet, weil ja kein 'menu' mehr gegeben ist.

  • Hast du denn danach auch im WP-Backend die Menüs kontrolliert? Dort musst du dann die richtigen Menüs auswählen.

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • Ok, so langsam klärt sich die Sache.

    Wenn ich

    PHP
    <?php wp_nav_menu( array( 'theme_location' => 'nav_footer' ....


    statt menu="" benutze, läuft es. Ich hatte zum Testen die Menüs abgewählt.

    Vielen Dank für die Hilfe.

    Dann habe ich aber den Sinn von menu="" nicht verstanden? Was gibt man damit an?

  • Hier kannst Du sehen, wie wp_nav_menu sich das Menü wählt:

    http://codex.wordpress.org/Function_Reference/wp_nav_menu

    Also guckt die Funktion zunächst, ob was in theme_location steht (das verwende ich zum Beispiel ausschließlich), dann ob was in menu steht und wenn nicht, dann nimmt sie das erste nicht-leere Menü.

    Der Parameter menu="..." bezieht sich dabei auf: ID, Slug oder Name des Menüs ("accepts (matching in order) id, slug, name"). Die ID und den Namen erfährst Du im Adminbereich unter Design->Menüs. Den Namen hast Du ja selbst vergeben und die ID siehst Du, wenn Du mit der Maus z.B. über "Menü löschen" fährst und dann den Link ansiehst. Dort steckt die ID drin. Wie man an die Slug kommt - keine Ahnung.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!