wp_nav_menu:仅在存在菜单时显示菜单,否则不显示


11

我正在尝试使用wp_nav_menu仅显示一个菜单(如果存在),否则不显示任何内容。

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

我的functions.php文件包含:

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

如何使用wp_nav_menu仅在存在菜单的情况下显示菜单,否则什么也不显示?

Answers:


19

使用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子句来输出替代内容。

编辑

您需要$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' => '' 
    ) );
}
?>

而如果没有这个菜单输出什么,这不幸的是做同样的当一个菜单。还有其他想法吗?
瑞安

您是否已将菜单应用于指定的主题位置?
Chip Bennett

不,我该怎么做?
瑞安

1
Dashboard -> Appearance -> Menus。创建并保存一个自定义菜单,然后使用下拉菜单将其应用到指定的主题位置。
Chip Bennett

嗯,是的,我做到了(截图:bit.ly/vrjNf9)。不幸的是,问题仍然存在-菜单不会出现。PS我的函数文件具有:if(function_exists('register_nav_menus')){register_nav_menus(array('main_nav'=>'Main Navigation Menu'));}
Ryan


0

您可以先注册菜单,而无需指定位置。
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' ) ); 
}

如果您注册的菜单中没有主题位置,则以后将无法请求带有主题位置限制的菜单。
fuxia

0

读这个:

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

设置'fallback_cb'=> false并且不会显示任何内容,这是wp伙计们建议的标准方法。


这与chrisguitarguy答案相同...
brasofilo

我知道,我只是想向您指出有关wordpress Codex的主要文章。
Hooman Askari 2013年

看来这是不正确的。文档说:如果没有给定theme_location参数,该函数将显示developer.wordpress.org/reference/functions/wp_nav_menu/…与菜单参数给定的ID,段或名称相匹配的菜单。否则,第一个非空菜单;否则(或者如果menu给定的菜单为空),则输出fallback_cb参数给定的函数(默认为wp_page_menu());否则什么都没有。
Alireza
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.