忽略WP_NAV_MENU$THEME_LOCATION参数

时间:2013-12-26 作者:Philipp Zedler

这是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”的菜单。根据我引用的文档,不应该显示任何内容,因为位置“胡说八道”不应该存在。

文档是否有误,或者我是否犯了一些错误?

2 个回复
最合适的回答,由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\'));
}

SO网友:Philipp Zedler

文件错误且不一致。还有一个附加参数fallback_cb 这决定了如果menu_location 不存在。默认情况下,它调用wp_page_menu 显示一些默认菜单。

我已经更正了文档,所以这个问题已经解决了。

感谢s\\u ha\\u dum为我指明了正确的方向!

结束

相关推荐

How to add taxonomy in menus?

书籍(自定义帖子类型)小说(税)科学(税)历史(税)--书籍体裁(税务)小说(术语)科学(学期)历史(学期)以下哪一项是做这件事的“好方法”?对于前一个(这是我目前在管理菜单中的功能,我为每个功能都提供了“register\\u taxonomy”功能),我无法选择要在菜单中显示的“Tax”。而对于后者,我可以将它们添加到菜单中,只需要一个“register\\u taxonomy”函数。