Versuch, Untermenüelemente zu speichern, die nach dem Hauptmenü ausgegeben werden sollen

Ich benutze ein benutzerdefiniertes Navigationsgerät, um das Hauptmenü auszugeben. Währenddessen möchte ich Navigationselemente der zweiten Ebene speichern, die später in einem separaten Bereich der Seite verwendet / wiedergegeben werden sollen.

Ich möchte, dass diese Navigationselemente der zweiten Ebene den Block anzeigen, wenn Sie sich gerade in diesem Bereich befinden (dh wenn Sie sich auf “Dienste” oder auf einer Unterseite von “Dienste” befinden, wird im Untermenü Block angezeigt). Wenn ich den Mauszeiger über “Dienste” halte, möchte ich das Untermenü anzeigen lassen.

Momentan habe ich das Untermenü in einem separaten benutzerdefinierten Navigationsassistenten erstellt – aber die Navigation wird nur angezeigt, wenn Sie sich in diesem Abschnitt befinden, nicht wenn Sie den Mauszeiger über den Hauptmenüpunkt bewegen. Außerdem, mit wie ich es derzeit eingerichtet habe, zeigt es den Menühintergrund / Stile auf Seiten, die keine Untermenüs haben

Dies ist mein vorhandenes Navigationsgerät nur für das Untermenü:

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); } } } 

Es wird von hier aufgerufen, wodurch der Menücontainer gerendert wird, selbst wenn keine Untermenüpunkte vorhanden sind 🙁

 

Solutions Collecting From Web of "Versuch, Untermenüelemente zu speichern, die nach dem Hauptmenü ausgegeben werden sollen"

Gestern hatte ich das selbe Problem und ich beschloss, den walker komplett zu wp_get_nav_menu_object und wp_get_nav_menu_items functionen wp_get_nav_menu_object und wp_get_nav_menu_items verwenden.

Wenn Sie var_dump($menu_items) , können Sie sehen, welche Eigenschaften verfügbar sind.

Hier ist ein Ausschnitt meines Codes, der das Menü “Main” für mein Twitter-Bootstrap-Menü erstellt:

  $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 .= ''; } else { $tmpWPMenu .= '
  • '; $tmpWPMenu .= ' '.$title.' '; $tmpWPMenu .= '
  • '; } } } // 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);

    Ich hoffe, das könnte helfen (oder Einblick geben) 🙂 Prost, T