$locations = get_nav_menu_locations();
WordPress 提供了一个条件函数 has_nav_menu() 来检查特定主题位置是否存在一个菜单。假设我们创建了一个容器,其中包含了一个菜单和一个搜索框。但是,如果没有为该位置定义菜单,我们希望这两个东西都不显示出来。也就是说,让这两样东西要么同时出现,要么都不出现。
当你在某个主题位置调用一个菜单时,可以先检查是否有菜单关联到该位置。注意,下面的例子中我们使用菜单别名而不是名称或者 ID 来进行判断。
<?php if ( has_nav_menu( 'primary-menu' ) ) { ?>
<div class="nav-container">
<?php wp_nav_menu( array( 'theme_location' => 'primary-menu' ) ); ?>
<?php get_search_form(); ?>
</div>
} ?>
允许更多地菜单容器标签
默认的菜单系统只允许使用 <div> 和 <nav> 作为菜单容器。这能满足大多数需要。但是,如果因为某些原因,你需要使用别的容器来包含菜单,你可以使用下面的代码来实现。
add_filter( 'wp_nav_menu_container_allowedtags', 'my_menu_allowed_tags' );
function my_menu_allowed_tags( $tags ) {
$tags[] = 'p';
return $tags;
}
请注意,这里的 <p> 标签仅仅是个例子,实际上一般不会使用这样的标签来包含一个菜单。
如果你需要列出主题中所有的菜单位置,需要使用下面的函数。该函数返回一个包含所有位置的数组。
$locations = get_nav_menu_locations();
检查指定的菜单是否存在
这个函数对主题开发人员可能没什么用,但是迟早还是会用到的。它让你能够通过 ID、名称或别名来检查特定的菜单是否存在。
if ( is_nav_menu( 'menu-slug' ) )
/* 如果该菜单存在则执行…… */
else
/* 如果该菜单不存在就执行…… */
如何在 WordPress 中检查菜单是否已分配可以使用上述代码,如果还想检查它是否被分配并且不是空的,需要使用 wp_nav_menu 并将 echo 参数设置为 false 来检查菜单是否为空,如下所示:
$has_menu_items = wp_nav_menu( array( 'theme_location' => 'main-menu', 'echo' => false )) !== false;
// check if menu location is assigned
$is_assigned = has_nav_menu('main-menu');
// check for both conditions
if($has_menu_items && $is_assigned) {
echo 'assigned';
} else {
echo 'no';
}
专业提供WordPress主题安装、深度汉化、加速优化等各类网站建设服务,详询在线客服!