it-swarm.com.de

wp_nav_menu: zeige Menü nur wenn eines existiert, sonst zeige nichts

Ich versuche, wp_nav_menu zu verwenden, um nur ein Menü anzuzeigen, wenn eines existiert. Andernfalls wird nichts angezeigt.

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

Meine functions.php Datei enthält:

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

Wie kann ich wp_nav_menu verwenden, um ein Menü nur anzuzeigen, wenn es existiert, andernfalls nichts anzuzeigen?

9
Ryan

Verwenden Sie has_nav_menu() und testen Sie auf theme_location anstatt auf 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 else-Klausel hinzufügen.

EDIT

Sie müssen $theme_location durch Ihren tatsächlichentheme_location ersetzen:

<?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' => '' 
    ) );
}
?>
16
Chip Bennett

Sie können einfach false als fallback_cb-Argument von wp_nav_menu angeben. Es wird nichts angezeigt - stattdessen gibt wp_nav_menu false zurück (und gibt nichts aus).

<?php
wp_nav_menu(array( 
    'theme_location' => $main_nav, 
    'menu_class'     => 'nav', 
    'container'      => '',
    'fallback_cb'    => false
));
6
chrisguitarguy

Sie können das Menü nur 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ü in header.php aufrufen, überprüfen Sie mit has_nav_menu() :

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

Lesen Sie dies:

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

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

0
Hooman Askari