我正在尝试在我的主题中构建一个子菜单,我已经让它工作了,除了它在没有子菜单的顶级页面上显示之外。
如何检查当前页面(或当前菜单项)是给定菜单中的父项还是子项(我很确定逻辑成立)?
目前,我正在尝试在menu函数之外进行此检查,因为它有包装div和一个标题,在页面不是父或子页面的情况下,我根本不想显示该标题。然而,如果我的问题的最佳答案是通过定制的助行器输出整个内容,那么我也愿意接受这可能的工作方式。
提前谢谢。
编辑:我有点进一步,但现在卡住了,我可以捕获作为变量的子菜单,但我不能检查“如果子菜单中没有任何内容,则不显示任何内容”。在以下代码中,$submenu
如果没有任何项目,则不会返回falsefallback_cb => false
.
$main_menu_id = 2; // Change to the main menu id for this install
$top_menu_id = 4; // Change to the top menu id for this install
$in_menu = \'\';
// Check what menu the page is in, if any
if( coepio_is_in_menu( $main_menu_id ) ) {
$in_menu = \'main-nav\';
} else if( coepio_is_in_menu( $top_menu_id ) ) {
$in_menu = \'top-nav\';
}
// If the page is in a menu...
if( $in_menu != \'\' ) {
// Capture submenu as a variable
$args = array(
\'theme_location\' => $in_menu,
\'echo\' => \'0\',
\'sub_menu\' => true,
\'falback_cb\' => false
);
$submenu = wp_nav_menu( $args );
// If the menu has items
if( $submenu ) {
echo \'Menu is good to go\';
?>
<div id="submenu" class="sidebar cf" role="navigation">
<div class="widget">
<div id="submenu-title" class="widget-title">
<h4>In This Section</h4>
</div>
<div class="widget-content">
<?php
echo $submenu;
?>
</div>
</div>
</div><!-- #submenu -->
<?php
}
}
你可能已经注意到了
\'sub_menu\' => true
在
$args
. 下面是处理该问题的代码,摘自另一篇SO帖子。
// Submenus - required for the submenu (above) to work
// filter_hook function to react on sub_menu flag
function coepio_submenu( $sorted_menu_items, $args ) {
if ( isset( $args->sub_menu ) ) {
$root_id = 0;
// find the current menu item
foreach ( $sorted_menu_items as $menu_item ) {
if ( $menu_item->current ) {
// set the root id based on whether the current menu item has a parent or not
$root_id = ( $menu_item->menu_item_parent ) ? $menu_item->menu_item_parent : $menu_item->ID;
break;
}
}
$menu_item_parents = array();
foreach ( $sorted_menu_items as $key => $item ) {
// init menu_item_parents
if ( $item->ID == $root_id ) $menu_item_parents[] = $item->ID;
if ( in_array( $item->menu_item_parent, $menu_item_parents ) ) {
// part of sub-tree: keep!
$menu_item_parents[] = $item->ID;
} else {
// not part of sub-tree: away with it!
unset( $sorted_menu_items[$key] );
}
}
return $sorted_menu_items;
} else {
return $sorted_menu_items;
}
}
add_filter( \'wp_nav_menu_objects\', \'coepio_submenu\', 10, 2 );