Попытка сохранить элементы подменю для вывода после основного меню

Я использую пользовательский навигатор для визуализации главного меню, во время которого я хочу сохранить элементы навигации второго уровня, чтобы использовать / визуализировать позже в отдельной области страницы.

Я хочу, чтобы эти элементы навигации второго уровня отображали блок, если вы в данный момент находитесь в этом разделе (т. Е. Если вы используете «службы» или подстраницу «сервисов», тогда подменю будет отображать блок). Кроме того, если я нахожусь над «службами», я хочу, чтобы подменю отображалось.

В настоящее время я выполнил подменю в отдельном пользовательском навигационном навигаторе – но навигация отображается только в том случае, если вы находитесь в этом разделе, а не когда вы наводите курсор на элемент главного меню. Кроме того, с тем, как я нахожусь в настройке, он показывает фон / стили меню на страницах, у которых нет подменю

Это мой существующий навигатор для подменю:

class MainSubmenuCustomWalker extends \Walker_Nav_Menu { function start_lvl(&$output, $depth=0, $args=array()) { if ($depth == 0) { return; } parent::start_lvl($output, $depth, $args); } function end_lvl(&$output, $depth=0, $args=array()) { if ($depth == 0) { return; } parent::end_lvl($output, $depth,$args); } // Don't print top-level elements public function start_el(&$output, $item, $depth=0, $args=array(), $id=0) { if ($depth == 0) { return; } parent::start_el($output, $item, $depth, $args); } function end_el(&$output, $item, $depth=0, $args=array()) { if ($depth == 0) { return; } parent::end_el($output, $item, $depth, $args); } function display_element($element, &$children_elements, $max_depth, $depth, $args, &$output) { $current_element_markers = array( 'current-menu-item', 'current-menu-parent', 'current-menu-ancestor' ); $current_class = array_intersect( $current_element_markers, $element->classes ); $ancestor_of_current = !empty($current_class); if (0 == $depth && !$ancestor_of_current) { return; } $id = $element->ID; if (($max_depth == 0 || $max_depth > $depth+1) && isset($children_elements[$id])) { foreach ($children_elements[$id] as $child) { if (!isset($newlevel)) { $newlevel = true; //start the child delimiter $cb_args = array_merge(array(&$output, $depth), $args); call_user_func_array(array($this, 'start_lvl'), $cb_args); } parent::display_element($child, $children_elements, $max_depth, $depth + 1, $args, $output); } unset($children_elements[$id]); } if (isset($newlevel) && $newlevel) { //end the child delimiter $cb_args = array_merge(array(&$output, $depth), $args); call_user_func_array(array(&$this, 'end_lvl'), $cb_args); } } } 

Он вызывается отсюда, который отображает контейнер меню, даже если нет элементов подменю 🙁

 <div class="main-submenu-navbar navbar navbar-default"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-submenu-collapse"> <span class="sr-only">Toggle Navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <?php Menu::submenus(); ?> 

Вчера у меня была такая же проблема, и я решил wp_get_nav_menu_object wp_get_nav_menu_items wp_get_nav_menu_object и вместо этого использовать функции wp_get_nav_menu_object и wp_get_nav_menu_items .

Если вы var_dump($menu_items) вы можете увидеть, какие свойства доступны.

Вот фрагмент моего кода, который создает меню под названием «main» для моего загрузочного меню Twitter:

  $menu_name = 'main'; // name of your menu $menu = wp_get_nav_menu_object($menu_name); $menu_items = wp_get_nav_menu_items($menu->term_id); $tmpWPMenu = ""; // string variable where the menu is stored // collect the menu-items (if any) and store them temporarily in // the $tmpChildren array with the $key = id of parent $tmpChildren = array(); foreach ( (array) $menu_items as $key => $menu_item ) { if (intval($menu_item->menu_item_parent) > 0) { $tmpChildren[$menu_item->menu_item_parent][] = $menu_item; } } // Now loop again and build it, // when a matching ID is encountered in the $tmpChildren array, build the submenu: foreach ( (array) $menu_items as $key => $menu_item ) { $title = $menu_item->title; $url = $menu_item->url; if (intval($menu_item->menu_item_parent) == 0) { // Does $tmpChildren contain a $key that is the id of this menu-item? if (array_key_exists($menu_item->ID, $tmpChildren)) { $tmpWPMenu .= '<li class="dropdown">'; $tmpWPMenu .= ' <a href="#" class="dropdown-toggle" data-toggle="dropdown"></i> '.$title.' <b class="caret"></b></a>'; $tmpWPMenu .= ' <ul class="dropdown-menu">'; foreach ($tmpChildren[$menu_item->ID] as $subMenuItem) { $tmpWPMenu .= '<li><a href="/ik/"><!--<i class="glyphicon glyphicon-user"></i>--> ' . $subMenuItem->title . '</a></li>'; } $tmpWPMenu .= ' </ul>'; $tmpWPMenu .= '</li>'; } else { $tmpWPMenu .= '<li>'; $tmpWPMenu .= '<a href="#"></i> '.$title.' </a>'; $tmpWPMenu .= '</li>'; } } } // Do something with the $tmpWPMenu, in my case I pass it // to the Smarty template engine that I use $tmpNavBarFindAndReplace['wp_menu'] = $tmpWPMenu; print $gBSOManager->pPageO->mRender($tmpNavBarFindAndReplace, 'mijn/navbar.html',true); 

Я надеюсь, что это может помочь (или дать понимание) 🙂 Cheers, T