如何在WooThemes画布中为注册用户创建不同的导航?

时间:2013-10-25 作者:Nazeem

我正在用wordpress和画布主题(来自WooThemes)构建一个网站。

我使用顶部导航在用户登录时显示项目。当用户未登录时,您只能看到“成为成员”和“登录”。当用户登录时,他/她会看到另一个带有其他菜单项的导航。

我想到了以下解决方案:

注册新导航

  • 应用钩子检查用户是否登录根据结果,为注册用户应用导航,否则显示其他
  • 我将此代码放在我的函数中。php:

    add_action( \'init\', \'register_top_menu_myisa\', 10 );
    
    function register_top_menu_myisa() {
        $menus = array(
                    \'top-menu-myisa\' => __( \'Top Menu MyISA\', \'woothemes\' )
                );
        register_nav_menus( $menus );
    }
    
    add_action( \'woo_top\', \'custom_top_navigation\', 10 );
    
    function custom_top_navigation() {
        if ( function_exists( \'has_nav_menu\' ) && has_nav_menu( \'top-menu\' ) ) {
    
            if(is_user_logged_in()) {
                $top_menu = \'top-menu-myisa\';
            } else {
                $top_menu = \'top-menu\';
            }
    
        echo \'<div id="top">\';
        echo \'<div class="col-full">\';
        echo \'<h3 class="top-menu">\' . woo_get_menu_name( $top_menu ) . \'</h3>\';
        wp_nav_menu( array( \'depth\' => 6, \'sort_column\' => \'menu_order\', \'container\' => \'ul\', \'menu_id\' => \'top-nav\', \'menu_class\' => \'nav top-navigation fl\', \'theme_location\' => $top_menu ) );
        echo \'</div>\';
        echo \'</div>\';
        }
    }
    
    第一个函数注册新的导航。第二个函数包含用于决定应显示哪个顶部导航的逻辑。

    However: when I look at my site, it displays both menu\'s (the one for non logged in users and the one for logged in users)Two navigation menu's displayed

    How can I modify the code so that it displays one top navigation menu, based on if the user is logged in or not?

    2 个回复
    最合适的回答,由SO网友:Nazeem 整理而成

    我自己解决了这个问题。我不知道确切的原因,但我会解释清楚我做了什么。

    我用的是Wordpress 3.5。更新到3.6后,我的导航代码开始工作。还有一点很重要,我确实使用了W3C Total Cache,但删除了它(在应用此代码之前),并将WP_DEBUG 标记为false. 我删除W3C Total Cache只是因为我正在试验它。

    这是最终代码:

    /* = Register the MyISA top navigation.
    ------------------------------------------------------------------------------------ */
    
    add_action( \'init\', \'isa_register_top_menu_myisa\');
    
    function isa_register_top_menu_myisa() {
        if(function_exists(\'has_nav_menu\') && !has_nav_menu(\'top-menu-myisa\')) {
        $menus = array(
                    \'top-menu-myisa\' => __(\'Top Menu MyISA\', \'woothemes\')
                );
        register_nav_menus($menus);
        }
    }
    
    
    /* = Determine the top navigation to display.
    
    When a user is logged in, the MyISA top navigation is displayed.
    Otherwise the default top navigation wil be visible.
    ------------------------------------------------------------------------------------ */
    
    add_action(\'woo_top\', \'woo_top_navigation\');
    
    function woo_top_navigation() {
        if (function_exists(\'has_nav_menu\') && has_nav_menu(\'top-menu\')) {
    
            if(is_user_logged_in()) {
                $top_menu = \'top-menu-myisa\';
            } else {
                $top_menu = \'top-menu\';
            }
    
            echo \'<div id="top">\';
            echo \'<div class="col-full">\';
            echo \'<h3 class="top-menu">\' . woo_get_menu_name($top_menu) . \'</h3>\';
    
            wp_nav_menu( array( \'depth\' => 6, \'sort_column\' => \'menu_order\', \'container\' => \'ul\', \'menu_id\' => \'top-nav\', \'menu_class\' => \'nav top-navigation fl\', \'theme_location\' => $top_menu ) );
    
            echo \'</div>\';
            echo \'</div>\';
        }
    }
    

    SO网友:Brad Dalton

    add_action(\'init\',\'wpsites_members_menu\');
    
    function wpsites_members_menu(){
    if(is_user_logged_in()){
        add_filter( \'wp_nav_menu_args\' , \'logged_in_nav_menu\' );
    }
    }
    
    为登录和注销的用户显示不同的导航菜单

    资料来源:http://wpsites.net/web-design/members-nav-menu-logged-in-members/

    function logged_in_nav_menu( $args ) {
    if ( $args[\'theme_location\'] == \'primary\' ) { 
        $args[\'menu\'] = \'members\'; 
    }
    return $args;
    }
    

    结束

    相关推荐

    从图像路径中删除‘wp-Content/Themes/Themename/’

    我目前正在将一个基于其他CMS的旧网站移动到一个新服务器上,使用WordPress。然而,这个网站在Google上排名很好,我必须保留所有的链接结构,包括来自图片的链接结构。因此,在旧CMS中,图像链接如下:http://www.domain-name.de/images/image1.jpg 现在,他们是这样的:http://www.domain-name.de/wp-content/themes/theme-name/images/image1.jpg 但它们必须与第一个示例中的一