如果在不存在菜单的情况下,“Has_NAV_Menu()”的测试不返回ECHO

时间:2015-04-29 作者:Frederick M. Rogers

我对“has\\u nav\\u menu()”的if/else测试有一个奇怪的问题。我在模板中有三个菜单位置,如果定义的位置存在菜单,则会对每个位置进行测试。但是,以下示例不会在菜单不存在时响应我想要的警告。第一个测试很好,但这个测试不行。我错过了什么?

<!-- Secondary Navigation Area -->                  
        <div class="row">
            <div class="small-12 columns">
                <?php
                    if ( has_nav_menu( \'header-top\' ) ) {
                        wp_nav_menu( array(
                            \'theme_location\'    => \'header-top\',
                            \'container\'         => \'nav\',
                            \'menu_class\'        => \'right no-bullets no-margin\',                                        
                            \'fallback_cb\'       => false,                               
                        ));
                    } else {
                        /* echo Fallback code if no menu has been choosen from the dashboard */
                        echo \'<p class="warning dark-bg">Her mangler det en meny.   Venligst gå tilbake til kontrollpanelet, <strong>Utseende > Menyer > Bestem plassering</strong> og velg en meny.</p>\';
                    }
                ?>
            </div>
        </div>

1 个回复
SO网友:TheDeadMedic

如果你退房has_nav_menu(), 您将看到,它首先检查该位置是否存在菜单(我们所期望的)。

However, 它也将返回true 如果位置只是注册的,那么即使没有菜单,您的条件仍然为真的原因是:

function has_nav_menu( $location ) {
    $registered_nav_menus = get_registered_nav_menus();
    if ( ! isset( $registered_nav_menus[ $location ] ) ) {
        return false;
    }

    $locations = get_nav_menu_locations();
    return ( ! empty( $locations[ $location ] ) );
}
相反,使用上面的代码片段检查是否注册了实际菜单:

$registered_nav_menus = get_registered_nav_menus();
if ( isset( $registered_nav_menus[ \'header-top\' ] ) ) {
    // Your nav menu
} else {
    // No menu
}
Update: 检查是否存在有效菜单(&P);有项目,使用echo => false 并检查输出:

$menu = wp_nav_menu(
    array(
        \'theme_location\' => \'header-top\',
        \'container\'      => \'nav\',
        \'menu_class\'     => \'right no-bullets no-margin\',
        \'fallback_cb\'    => false,
        \'echo\'           => false,
    )
);

if ( $menu ) {
    echo $menu;
} else {
    echo \'No menu!\';
}

结束

相关推荐

注册_NAV_MENUS,然后以编程方式创建菜单

我有一个register_nav_menus 调用我的主题函数。php://register nav menu and footer nav. register_nav_menus( array( \'main-nav\' => \'Main Navigation\', \'footer-nav\' => \'Footer Navigation\' ) ); 这很好,但我想采取额外的步