wp_nav_menu: Menü nur anzeigen, wenn eines vorhanden ist, andernfalls nichts anzeigen


11

Ich versuche, wp_nav_menu zu verwenden, um ein Menü nur anzuzeigen, wenn eines vorhanden ist, andernfalls wird nichts angezeigt.

Wenn ich das Menü lösche, wird eine Liste der Seiten ausgegeben.

Meine Datei functions.php enthält:

if (function_exists('register_nav_menus')) {
register_nav_menus (
array('main_nav' => 'Main Navigation Menu'));}

Wie kann ich mit wp_nav_menu nur ein Menü anzeigen, wenn eines vorhanden ist, andernfalls nichts anzeigen?

Antworten:


19

Verwenden has_nav_menu()und testen Sie theme_locationstatt menu_id:

<?php
if ( has_nav_menu( $theme_location ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => $theme_location, 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Sie können alternativen Inhalt ausgeben, indem Sie eine elseKlausel hinzufügen .

BEARBEITEN

Sie müssen durch $theme_locationIhre tatsächliche ersetzen theme_location:

<?php
if ( has_nav_menu( 'main_nav' ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => 'main_nav', 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Während dies nichts gibt , wenn es keine Speisekarte, hat es leider das gleiche , wenn es ist ein Menü. Irgendwelche anderen Ideen?
Ryan

Haben Sie ein Menü auf den angegebenen Themenort angewendet?
Chip Bennett

Nein, wie mache ich das?
Ryan

1
Dashboard -> Appearance -> Menus. Erstellen und speichern Sie ein benutzerdefiniertes Menü und wenden Sie es dann über das Dropdown-Menü auf den angegebenen Themenort an.
Chip Bennett

Ah ja, das hatte ich getan (Screenshot: bit.ly/vrjNf9 ). Leider besteht das Problem weiterhin - das Menü wird nicht angezeigt. PS Meine Funktionsdatei enthält Folgendes: if (function_exists ('register_nav_menus')) {register_nav_menus (array ('main_nav' => 'Hauptnavigationsmenü'));}
Ryan


0

Sie können das Menü einfach zuerst registrieren, ohne den Ort anzugeben.
In functions.php:

add_action( 'init', 'register_my_menus' );
function register_my_menus() {  
    register_nav_menus(
        array(
            'header' => __( 'Header Menu' )
        )
    );
}

Und wenn Sie das Menü aufrufen header.php, überprüfen Sie mit has_nav_menu():

if ( has_nav_menu( 'header' ) ) {
    wp_nav_menu( array( 'theme_location' => 'header' ) ); 
}

Wenn Sie ein Menü ohne Themenort registrieren , können Sie es später nicht mit einer Einschränkung des Themenorts anfordern.
Fuxia

0

Lesen Sie dies:

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

setze 'fallback_cb' => false und es wird keine angezeigt. Dies ist die Standardmethode, die von wp-Leuten vorgeschlagen wird.


Dies ist das gleiche wie chrisguitarguy Antwort ...
brasofilo

Ich weiß, ich wollte Sie nur auf den Hauptartikel über WordPress-Codex hinweisen.
Hooman Askari

Es scheint, dass es nicht wahr ist. In den Dokumenten heißt es: Wenn kein Parameter theme_location angegeben ist, zeigt die Funktion developer.wordpress.org/reference/functions/wp_nav_menu/… das Menü an, das der ID, dem Slug oder dem Namen des Menüparameters entspricht. Andernfalls wird das erste nicht leere Menü angezeigt. Andernfalls (oder wenn das von menu angegebene Menü leer ist) wird die vom Parameter fallback_cb angegebene Funktion ausgegeben (standardmäßig wp_page_menu ()). sonst nichts.
Alireza
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.