我只想在导航主菜单中显示给定级别的菜单项。目前,我的主菜单的子菜单是主菜单HTML的一部分,HTML是导航链接列表中的无序列表。
<ul id="menu-main-top-navigation">
<li class="menu nav-1">
...
<ul>
<li class="menu sub-nav-1"></li>
<li class="menu sub-nav-2"></li>
</ul>
</li>
<li class="menu nav-2">...</li>
<li class="menu nav-3">...</li>
</ul>
在菜单nav-1的页面上,我想要
<ul id="menu-main-sub-navigation">
<li class="menu sub-nav-1">...</li>
<li class="menu sub-nav-2">...</li>
</ul>
目前,我已经编写了一段黑客代码,当页面打开时,它只显示给定菜单项的第二级导航。然而,它不适用于任何给定的级别。
我认为定制步行机是一种方式,但我似乎无法让它发挥作用。。。
EDIT:
这是我的黑客代码,目前只在页面上显示二级子导航;
function submenu_display( $items, $args ) {
$current_page_id = (string)get_the_ID();
$top_level = array();
$second_level = array();
foreach ( $items as $item ) {
// The parent menu ID is different to the object (post) ID
if ( $item->object_id === $current_page_id ) {
$current_parent_id = $item->ID;
}
if ( $item->menu_item_parent === \'0\' ) {
$top_level[ $item->ID ] = $item->object_id;
}
if ( array_key_exists( $item->menu_item_parent, $top_level ) ) {
$second_level[ $item->ID ] = $item->object_id;
}
}
if ( isset( $current_parent_id ) ) {
if ( array_key_exists( $current_parent_id, $second_level ) ) {
foreach ( $items as $item => $details ) {
if ( $current_parent_id === $details->ID ) {
$current_parent_id = $details->menu_item_parent;
}
}
}
if ( array_key_exists( $current_parent_id, $top_level ) ) {
foreach ( $items as $item => $details ) {
if ( $details->menu_item_parent != $current_parent_id ) {
unset( $items[ $item ] );
}
}
}
} else {
$items = array();
}
return $items;
}
并通过
add_filter( \'wp_nav_menu_objects\', \'submenu_display\', 10, 2 );
wp_nav_menu( array( \'theme_location\' => \'primary_navigation\',
\'menu_class\' => \'nav nav-sub\',
\'menu_id\' => \'menu-main-sub-navigation\'
) );
remove_filter( \'wp_nav_menu_objects\', \'submenu_display\', 10 );
最合适的回答,由SO网友:s_ha_dum 整理而成
您需要扩展Walker_Nav_Menu
如果我理解的话,它只输出深度不是“零”的项目——顶层。
class my_extended_walker extends Walker_Nav_Menu {
function start_lvl(&$output, $depth, $args ) {
if (0 !== $depth) {
parent::start_lvl($output, $depth, $args);
}
}
function end_lvl(&$output, $depth, $args) {
if (0 !== $depth) {
parent::end_lvl($output, $depth, $args);
}
}
function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
if (0 !== $depth) {
parent::start_el($output, $item, $depth, $args, $id);
}
}
function end_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
if (0 !== $depth) {
parent::end_el($output, $item, $depth, $args, $id);
}
}
}
// testing
wp_nav_menu(
array(
\'walker\'=>new my_extended_walker(),
\'menu\' => \'mymenu\'
)
);