WordPress 提供了一个条件函数 has_nav_menu() 来检查特定主题位置是否存在一个菜单。假设我们创建了一个容器,其中包含了一个菜单和一个搜索框。但是,如果没有为该位置定义菜单,我们希望这两个东西都不显示出来。也就是说,让这两样东西要么同时出现,要么都不出现。
当你在某个主题位置F 7 l调用一个菜单时,可以先检查是否有菜单关联到该位置。注意,下面的例子中我们使用菜单A n G别名而不是名称或者 ID 来进行判断。
- <7 ! Q;?php if ( has_nav_menuv % 2 ? x o %( 'primary-m6 \ .enu' ) ) { ?>
- <div class="nav-container"V v d O Q , 4 E>
- <?php wp_nav_~ X \ } z A Amenu( array( 'Z Y V c K k Atheme_location' => 'primary-menu' ) ); ?>
- <?php get_search_form(); ?>
- </div>
- } ?>
允许更多地菜单容器标签
默认的菜单n o ! C系统只允许使用 <div> 和 <nav> 作为菜单容器。这能满足大多数需要。但是,如果因为某些原因,你需要使用别的容器来包含菜单,{ h ~ P y你可以使用下面的tag/23/" target="_blank">代码来实现。
- add_filter( 'wp_nav_menu_container_allowedtags', 'my_menu_allowed_tags' w D l g A / B )1;;
- function my_menu_allowed_tags( $tags ) &m g U#123;
- $tags[] =& x W x z O f X 'p';
- return $tags;
- }
请注意,这里的 <p> 标签仅仅是个例子,实际上一般不会使用这样: q F k h G \ S的标签来包含一个菜单。
如果你需要列出主题中所有的菜单位置,需要使~ / = c用下面的函数。该函数返回% Y ; k M y一个包含所有位置的数组。
- $location1 : M C ( : Bs = get_nav_menu_l_ % v N 3 G ; gocations();
检查指定的菜单是否存在
这个函数对主题开发人员可能没什么用,但是迟早还是会用到的。它让你能够通过 ID、名称或别名来检查特定的菜单是否存在。
- if ( is_nav_menu( 'menu-slug' ) )
- /* 如果该菜单存在则执行…… */
- else
- /d Z Y C % i* 如果该菜单不存在就执行…… */
扩展应用:W / \ B | % u h 8
如何在 WordPress 中检查菜单是否6 ] | % %已分配可以使用上述代W J * D A码,如果还想检查它是否被分配并且不是空的,需要使用 wp_nav_menu 并将 echo 参数设置为 false 来检查菜单是否为空,如下所示:
- $has_menu_Q c F 4 ^ P 3 I gitems = wp_nav_menu( arrayR U Q :40; 'theme( \ # , / 1 @ 3 6_location' => 'main-menu', 'e, U + ;cho' => false )) !== false;
- // checkD A i n I C ; if menu: p a @ C o 6 9 . location is assigned
- $is_assigned = has_nav_menu('main-menu');
- // check for both conditionsq [ Q c J X p S
- if# : q \ `40;$has_menu_items && $ih ? b Hs_assig$ C 7 Y % i ! ] [ned) {
- echo 'asQ V G O UsiI C + q Jgned';
- = b & * b125;1 8 c r el0 6 (se {
- echo 'no';
- }