Wie vermeide ich einen ID-Konflikt zwischen wp_nav_menu ()?

7

Wie vermeide ich ID-Konflikte, wenn ich ZWEIMAL dasselbe Menü auf einer Seite verwende?

ZUERST

wp_nav_menu( array( 'sort_column' => 'menu_order', 
'theme_location'=>'menu', 'menu_class'=>'menu', 'menu_id'=>'menu' ) );

ZWEITE:

wp_nav_menu( array( 'sort_column' => 'menu_order', 
'theme_location'=>'menu', 'menu_class'=>'menu2', 'menu_id'=>'menu2' ) );

ID-Konflikte sind wie "Duplicate ID menu-item-2456" ... Irgendwelche Lösungen?

Paul
quelle
Sie sollten nicht denselben theme_location verwenden. Können Sie einen zweiten definieren?
Mario Peshev
Dies kann bei verschiedenen 'theme_location's nicht passieren . Ich werde meine Antwort entfernen.
Fuxia

Antworten:

2

Die Lösung besteht darin, dasselbe nicht 'theme_location'mehr als einmal aufzurufen . Der Themenort soll einen expliziten Ort innerhalb der Vorlage darstellen .

Registrieren 'theme_location'Sie einfach eine separate Position für jede separate Position in der Vorlage, für die Sie ein Navigationsmenü anzeigen möchten.

Betrachten Sie Ihre ausgewählten 'theme_location'Namen als semantische Namen, die den Vorlagenstandort des Menüs darstellen. Sie könnten 'primary'und 'secondary', oder 'header'und 'footer'usw.: Verwenden .

<?php
function wpse55380_setup_theme() {

    // Register nav menu locations
    register_nav_menus( array(
        'header' => 'Header Menu',
        'footer' => 'Footer Menu'
    ) );
}
add_action( 'after_setup_theme', 'wpse55380_setup_theme' ); 

...oder:

<?php
function wpse55380_setup_theme() {

    // Register nav menu locations
    register_nav_menus( array(
        'primary'   => 'Primary Header Menu',
        'secondary' => 'Secondary Header Menu'
    ) );
}
add_action( 'after_setup_theme', 'wpse55380_setup_theme' ); 

Dann ist es Sache des Endbenutzers , jedem Themenort benutzerdefinierte Menüs zuzuweisen.

Chip Bennett
quelle
Vielen Dank :) Ja, dies beantwortet meine Frage, aber was ist, wenn ich "Header-Menü" als normales Menü und genau das gleiche Menü in kompakter Version verwenden möchte (z. B. verbirgt es "Header-Menü" und zeigt "Kompaktes Header-Menü" im Blog an Platz sparen)? Es ist unpraktisch, Themenbenutzer zu bitten, dasselbe Menü zweimal einzurichten. Irgendwelche Vorschläge?
Paul
2
Zum einen: Was ist der tatsächliche Unterschied zwischen dem Header-Menü und dem kompakten Header-Menü ? Wenn Sie die Unterschiede kennen, können Sie den besten Weg zur Implementierung ermitteln. Zum anderen: Ich bin nicht der Meinung, dass es eine schlechte Form ist, den Benutzer zu bitten, zwei separate Menüs für zwei separate Anwendungsfälle zu definieren . Tatsächlich kann das Erstellen eines reaktionsschnellen / mobilen Themas sehr wohl bedeuten, dass der Benutzer ein vollständiges Menü und ein kompaktes / gekürztes Menü definiert, die je nach Kontext ausgegeben werden.
Chip Bennett
"Header Menu" ist genau das gleiche wie "Compact Header Menu". Das erste versteckt sich und das zweite scheint mehr Platz für Inhalte zu schaffen. Ja, es ist reaktionsschnelles / mobiles Verhalten, um Platz zu sparen. Ich möchte den CSS-Stil nicht beeinflussen, um dies zu erreichen. In diesem speziellen Fall sollte es ziemlich dasselbe sein, da es nur angezeigt wird, wenn das POPUP-Fenster mit Inhalt angezeigt wird.
Paul
" " Header Menu "ist genau das gleiche wie" Compact Header Menu ". " Es kann nicht sein; Warum sonst sogar zwei separate Menüs? Wenn sie sich in Bezug auf CSS nicht unterscheiden, wie unterscheiden sie sich dann?
Chip Bennett
Das normale Menü hat eine Höhe von 150 Pixel und Symbole, das zweite Menü hat eine Höhe von 30 Pixel, keine Symbole, nur Text. Das erste wird mit jQuery vom Bildschirm nach oben und das zweite nach unten (um sichtbar zu sein) verschoben.
Paul