WP_NAV_MENU:仅当存在菜单时才显示菜单,否则不显示任何菜单

时间:2011-11-02 作者:Ryan

我试图使用wp\\u nav\\u menu仅显示存在的菜单,否则不显示任何内容。

如果我删除菜单,它将输出一个页面列表。

我的职能。php文件包含:

if (function_exists(\'register_nav_menus\')) {
register_nav_menus (
array(\'main_nav\' => \'Main Navigation Menu\'));}
如何使用wp\\u nav\\u menu仅显示存在的菜单,否则不显示?

4 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

使用has_nav_menu(), 和测试theme_location, 而不是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\' => \'\' 
    ) );
}
?>
您可以通过添加else 条款

EDIT

您需要更换$theme_location 使用您的实际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\' => \'\' 
    ) );
}
?>

SO网友:chrisguitarguy

您可以将false指定为fallback_cb 的参数wp_nav_menu. 不会显示任何内容——相反,wp\\u nav\\u menu将返回false(不响应任何内容)。

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

SO网友:Alex Chen

您只需先注册菜单,无需指定位置
英寸functions.php:

add_action( \'init\', \'register_my_menus\' );
function register_my_menus() {  
    register_nav_menus(
        array(
            \'header\' => __( \'Header Menu\' )
        )
    );
}
当你打开菜单时header.php, 检查has_nav_menu():

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

SO网友:Hooman Askari

阅读以下内容:

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

将“fallback\\u cb”设置为false,将不显示任何内容,这是wp guys建议的标准方法。

结束