最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

navigation - Nav Menu: Theme Location not working

programmeradmin0浏览0评论

Why do my created Menus on the WordPress Admin dashboard appear in customtemplate.php DESPITE not defining it the correct 'theme_location'?

It will show in that location EVEN if the created menu in the WordPress Admin dashboard is not set to show in any location.

It only hides if the following if check is tested. Why?

if(has_nav_menu('menu-ID1'))

Functions.php

register_nav_menus(
            array(
                'menu-ID1' => __( 'MenuName', 'blabla' ),
            )
        );

customtemplate.php

//Still displays even though the registered menu-ID1 is not used    
wp_nav_menu(['theme_location' => 'randomname']);

Why do my created Menus on the WordPress Admin dashboard appear in customtemplate.php DESPITE not defining it the correct 'theme_location'?

It will show in that location EVEN if the created menu in the WordPress Admin dashboard is not set to show in any location.

It only hides if the following if check is tested. Why?

if(has_nav_menu('menu-ID1'))

Functions.php

register_nav_menus(
            array(
                'menu-ID1' => __( 'MenuName', 'blabla' ),
            )
        );

customtemplate.php

//Still displays even though the registered menu-ID1 is not used    
wp_nav_menu(['theme_location' => 'randomname']);
Share Improve this question edited Nov 24, 2020 at 6:56 Valeron asked Nov 24, 2020 at 2:55 ValeronValeron 33 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

I'm guessing your menu contains only Pages (posts of the page type) on your site?

But nonetheless, with wp_nav_menu(), if you specify a theme_location that doesn't exist or contains no menu (i.e. no menus assigned to that location), then the fallback_cb arg (which defaults to wp_page_menu()) will determine what is displayed.

So if you want the function to display the menu only if it's assigned to the specified theme location, you can do the has_nav_menu() check:

if ( has_nav_menu( 'menu-ID1' ) ) {
    wp_nav_menu( 'theme_location=menu-ID1' );
}

or set the fallback_cb to an empty string:

wp_nav_menu( array(
    'theme_location' => 'menu-ID1',
    'fallback_cb'    => '',
) );

// or you may pass the function args as a query string:
wp_nav_menu( 'theme_location=menu-ID1&fallback_cb=' );
发布评论

评论列表(0)

  1. 暂无评论