根据x在Theme_Location中显示不同的菜单

时间:2015-04-29 作者:Johan Dahl

我想根据某些条件在同一个theme\\u位置显示不同的菜单。我想知道这是否可能,如果可能,怎么可能?

我希望避免注册额外的theme\\u位置,因为它实际上只是放在同一个位置,而在同一个位置有两个位置可能会让用户感到困惑。

我尝试在第一个if语句中命名另一个菜单,但得到的菜单与else中的菜单相同。

我的代码:

<?php
    if ( preg_match (\'#^/company/#\', $_SERVER[\'REQUEST_URI\']) ) {
        # get me another menu in the same theme location as below
    }
    else {
        wp_nav_menu( array( \'menu\' => \'Primary Menu\', \'theme_location\' => \'primary\' ) );
    }
?>
我是否必须注册两个theme\\u位置,或者是否可以注册一个?

1 个回复
SO网友:Johan Dahl

好的,我设法解决了这个问题。在这里为感兴趣的人发布答案。

我不太明白register\\u nav\\u menus只注册菜单位置。这是我使用的代码,它在同一位置有条件地使用不同的命名菜单。要使其工作,必须使用创建菜单时指定的确切名称。或者,正如我所做的那样,以编程方式创建它们,以确保它们始终存在并正确命名。

<?php
    if ( preg_match (\'#^/company/#\', $_SERVER[\'REQUEST_URI\']) ) {
        wp_nav_menu( array( \'menu\' => \'company-primary\', \'theme_location\' => \'primary\', \'fallback_cb\'=> false  ) );
    }
    else {
        wp_nav_menu( array( \'menu\' => \'private-primary\', \'theme_location\' => \'primary\', \'fallback_cb\'=> false  ) );
    }
?>
我使用此代码设置了一些默认菜单:

// Set up default menus
$private_menu_exists = wp_get_nav_menu_object( \'private-primary\' );
if( !$private_menu_exists){
    $menu_id = wp_create_nav_menu( \'private-primary\' );
}
$company_menu_exists = wp_get_nav_menu_object( \'company-primary\' );
if( !$company_menu_exists){
    $menu_id = wp_create_nav_menu( \'company-primary\' );
}

结束

相关推荐

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

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