【问题标题】:Conditional menu in WordPress via functions.php (no plugin)WordPress中的条件菜单通过functions.php(无插件)
【发布时间】:2020-07-26 05:52:19
【问题描述】:

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 仪表板中进行了一系列更改后,它停止了工作。

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

编辑:

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

如果我把它放在我的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

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

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

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

【问题讨论】:

  • 所有仪表板更改是否正确在服务器中进行?喜欢在设置页面设​​置主页?
  • 在页面设置中设置首页和博客页面。我再次设置它们并保存它以确保,但没有更改。在菜单设置中,`'主导航-子页面'`被设置为标准,与本地主机相同。如果我将“主导航-首页”设置为标准,它也会将其应用于子页面。在 localhost 上,由于我的 if 语句(我希望),它使用 'Main navigation - front page' 作为首页。

标签: php wordpress


【解决方案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'));
         } 

【讨论】:

    【解决方案2】:

    从你的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'));
    } 
    

    【讨论】:

    • 我做到了。在 WP 仪表板页面设置中,我将 Main navigation 设置为首页的菜单,将 Sub Menu 设置为所有其他页面。但是现在由于某种原因,它将始终使用页脚导航作为主导航,即使页脚导航已明确设置为这样。 menu-3 只出现在我的页脚代码和仪表板中,它也被定义为页脚导航。
    【解决方案3】:

    试试这个

    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' );
    

    【讨论】:

      猜你喜欢
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2022-08-07
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多