1

WordPress中,我想在首页显示与所有其他页面不同的菜单(没有插件)。我正在使用我自己创建的主题。

这是代码:

functions.php

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(动态加载到所有页面)

    <?php
        wp_nav_menu(
            array(
                'theme_location' => 'menu-1',
                'menu_id'        => 'primary-menu',
            )
        );
    ?>

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

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

编辑:

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

如果我把它放在我的 WordPress 中HTML,WordPress 将始终使用页脚导航作为主导航,即使在仪表板中,页脚已明确设置为这样 - 并且只有这样:

        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任何地方。

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

        wp_nav_menu(
            array(
                'theme_location' => 'menu-1',
                'menu_id'        => 'primary-menu',
            )
        );

我尝试了 vicky 对我的建议的建议functions.php,但我一直遇到同样的问题,即相同的主菜单用于首页和其他页面......

4

3 回答 3

1

根据上面的建议,我编辑了我的代码。现在开始工作了!:) 感谢大家!

(请注意,此版本中的名称略有不同,因为我在它工作后也更改了这些名称)

中的工作代码functions.php

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

        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'));
         } 
于 2020-07-26T08:01:19.197 回答
1

尝试这个

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' );
于 2020-07-26T07:02:52.447 回答
1

从您的functions.php中删除过滤器挂钩wp_nav_menu_args并将以下代码放入您的header.php

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'));
} 
于 2020-07-26T06:45:47.247 回答