WordPress: отображать только элементы подменю верхнего уровня родителя текущей страницы из пользовательского меню навигации

Мне нужна помощь в объединении этих двух кодов:

этот:

<?php wp_nav_menu(
array(
'theme_location'  => 'primary',
'container_class' => 'collapse navbar-collapse',
'container_id'    => 'navbarNavDropdown',
'menu_class'      => 'navbar-nav',
'fallback_cb'     => '',
'menu_id'         => 'main-menu',
'walker'          => new rorentrep_WP_Bootstrap_Navwalker(),
)
);
?>

и это (из https://www.minddevelopmentanddesign.com/blog/showing-current-pages-parents-sub-menu-items-custom-nav-menu-wordpress/):

<?php
$section_id = empty( $post->ancestors ) ? $post->ID : end( $post->ancestors );
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locations[ 'primary' ] ); // 'primary' is our nav menu's name
$menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'post_parent' => $section_id ) );

if( !empty( $menu_items ) ) {
echo '<ul class="section-submenu">';
foreach( $menu_items as $menu_item ) {
echo '<li><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
}
echo '</ul>';
}
?>

Точнее, я хочу, чтобы ссылки, которые повторяет второй код, отображались как первый код.

Структура моих страниц такая:

Business
- Sub page a
- Sub page b
- Sub page c

Private
- Sub page x
- Sub page y
- Sub page z

Всякий раз, когда я посещаю детскую страницу Бизнеса, я хочу, чтобы в меню отображалась только Подстраница a-c, а когда я захожу на детскую страницу Приват, я хочу, чтобы в меню отображалась только Подстраница x-z.

Поскольку можно добавить несколько страниц, я не хочу ориентироваться на конкретные идентификаторы страниц.

Основная причина этого заключается в том, что выходной код переносится и вкладывается, как wp_nav_menu, с помощью навигационной системы начальной загрузки walker (добавление текущих классов к элементам nav).

0

Решение

В своем классе ходунков вы можете установить поведение для каждого уровня. Затем проверьте глубину в методе элемента: start_el

class Footer extends \Walker_Nav_Menu
{
function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0)
{
if ($depth == 0) {
$output .= '
<li class="list-inline-item">
<a href="' . $item->url . '" title="' . $item->title . '">
' .  $item->title  . '
</a>
</li>';
}
}
function start_lvl( &$output, $depth = 0, $args = array() ) {
$output.= '';
}
function end_lvl( &$output, $depth = 0, $args = array() ) {
$output.= '';
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]