首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WordPress中的条件菜单通过functions.php (无插件)

WordPress中的条件菜单通过functions.php (无插件)
EN

Stack Overflow用户
提问于 2020-07-26 05:52:19
回答 3查看 1.9K关注 0票数 1

WordPress中,我希望在首页显示一个与其他页面不同的菜单(没有插件)。我用的是我自己创造的主题。

这是代码:

functions.php

代码语言:javascript
复制
register_nav_menus(
    array(
        'menu-1' => esc_html__( 'Main navigation', 'theme' ),
        'menu-2' => esc_html__( 'Sub Menu', 'theme' ),
        'menu-3' => esc_html__( 'Footer - Navigation', 'theme' ),
    )
);

function theme_wp_nav_menu_args( $args = '' ) {

    if( is_front_page() ) { 
        $args['menu-1'] = 'Main navigation - front page';
    } else { 
        $args['menu-1'] = 'Main navigation - sub page';
    } 
        return $args;
    }
    add_filter( 'wp_nav_menu_args', 'theme_wp_nav_menu_args' );

header.php (动态加载到所有页面)

代码语言:javascript
复制
    <?php
        wp_nav_menu(
            array(
                'theme_location' => 'menu-1',
                'menu_id'        => 'primary-menu',
            )
        );
    ?>

奇怪的是,这段代码在localhost上工作。将其上传到服务器并对WordPress仪表板进行一系列更改之后,它就停止工作了。

我试图重新创造这个过程,但没有成功。所以现在我想知道,我的代码中有什么不正确的地方吗?我错过了什么?

编辑:

我尝试了不同的建议(到目前为止,谢谢大家!)

如果我将其放在我的HTML中,WordPress将始终使用页脚导航作为主导航,即使在仪表板中,页脚显然是这样设置的--而且只有这样:

代码语言:javascript
复制
        if( is_front_page() ) { 
            wp_nav_menu(array('menu'=>'menu-1','menu_id'=>'primary-menu'));
            } else { 
            wp_nav_menu(array('menu'=>'menu-2','menu_id'=>'primary-menu'));
        } 

我觉得这很奇怪,因为在functions.php中,脚注就是menu-3。但这段代码在任何地方都没有提到menu-3

通过在我的HTML中使用它,主导航显示为主导航,而页脚仅显示为页脚:

代码语言:javascript
复制
        wp_nav_menu(
            array(
                'theme_location' => 'menu-1',
                'menu_id'        => 'primary-menu',
            )
        );

我尝试了维基的建议,我的functions.php,但我一直有相同的问题,同样的主菜单是使用在头版和其他网页.

EN

回答 3

Stack Overflow用户

发布于 2020-07-26 06:45:47

从您的wp_nav_menu_args中删除筛选器钩子functions.php,并将以下代码放入header.php中

代码语言:javascript
复制
if( is_front_page() ) { 
   wp_nav_menu(array('menu'=>'menu-1','menu_id'=>'primary-menu'));
} else { 
   wp_nav_menu(array('menu'=>'menu-2','menu_id'=>'primary-menu'));
} 
票数 1
EN

Stack Overflow用户

发布于 2020-07-26 07:02:52

尝尝这个

代码语言:javascript
复制
register_nav_menus(
    array(
        'menu-1' => esc_html__( 'Main navigation', 'theme' ),
        'menu-2' => esc_html__( 'Sub Menu', 'theme' ),
        'menu-3' => esc_html__( 'Footer - Navigation', 'theme' ),
    )
);

function theme_wp_nav_menu_args( $args = '' ) {

    if( is_front_page() ) { 
        $args['menu_id'] = 'Main navigation - front page';
    } else { 
        $args['menu_id'] = 'Main navigation - sub page';
    } 
        return $args;
    }
    add_filter( 'wp_nav_menu_args', 'theme_wp_nav_menu_args' );
票数 1
EN

Stack Overflow用户

发布于 2020-07-26 08:01:19

基于上述建议,我已经编辑了我的代码。谢谢大家!

(请注意,这个版本中的名称略有不同,因为我在该版本生效后也更改了这些名称)

functions.php中的工作代码

代码语言:javascript
复制
register_nav_menus(
    array(
        'menu-1' => esc_html__( 'Navigation 1', 'theme' ),
        'menu-2' => esc_html__( 'Navigation 2', 'theme' ),
        'menu-3' => esc_html__( 'Fußleiste - Navigation', 'theme' ),
    )
);

function praxis_wp_nav_menu_args( $args = '' ) {
 
    if( is_front_page() ) { 
        $args['menu-1'] = 'Startseite';
    } else { 
        $args['menu-2'] = 'Unterseiten';
    } 
        return $args;
    }

header.php

代码语言:javascript
复制
        if( is_front_page() ) { 
            wp_nav_menu(array('theme_location'=>'menu-1','menu_id'=>'primary-menu'));
         } else { 
            wp_nav_menu(array('theme_location'=>'menu-2','menu_id'=>'primary-menu'));
         } 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63096571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档