这是documentation of the function wp nav menu
:
给定theme_location parameter
, 该功能显示分配给该位置的菜单,如果不存在该位置或未分配菜单,则不显示任何内容。
然而,我提供了theme_location
我还没有注册,尽管如此,还是会出现一个菜单项。
这是我的功能。php:
<?php
function register_my_menu() {
register_nav_menu(\'header-menu\',__( \'Header Menu\' ));
}
add_action( \'init\', \'register_my_menu\' ); ?>
下面是我如何调用菜单:
<?php wp_nav_menu($args = array(\'theme_location\' => \'nonsense\')); ?>
在我的页面上,会出现一个带有默认项“Sample page”的菜单。根据我引用的文档,不应该显示任何内容,因为位置“胡说八道”不应该存在。
文档是否有误,或者我是否犯了一些错误?
最合适的回答,由SO网友:s_ha_dum 整理而成
文档错误。Check the source. 有两条很有说服力的评论。首先是:
// Get the nav menu based on the theme_location
之后还有另一条评论,内容如下:
// get the first menu that has items if we still can\'t find a menu
在最后一条注释之后,代码将运行
wp_get_nav_menus
并循环浏览网站上的每个菜单,希望找到一个包含相关项目的菜单。换句话说,
wp_nav_menu
拼命尝试创建菜单,并将使用它找到的第一个菜单。我不明白那代码背后的逻辑。我有后备的概念,但这让我觉得是后备过度了。
您需要将代码包装在has_nav_menu
以防止这种行为。
if (has_nav_menu(\'nonsense\')) {
wp_nav_menu(array(\'theme_location\' => \'nonsense\'));
}