Nur Kinder (Unter-Navigation) des aktiven Menüelements anzeigen

Also habe ich das Netz durchsucht und versucht, eine benutzerdefinierte Walker-class zu schreiben, die das tut, aber ich bin neu in WordPress und obwohl ähnliche Fragen existieren, passen keine genau das, wonach ich suche, oder schlage CSS, jQuery oder ein Plugin vor als eine Lösung (die nicht wirklich ideal ist).

Ich habe derzeit den folgenden Code:

class description_walker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ); $class_names = ' class="'. esc_attr( $class_names ) . '"'; $output .= $indent . '
  • ID . '"' . $value . $class_names .'>'; $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; $prepend = ''; $append = ''; $description = ! empty( $item->description ) ? ''.esc_attr( $item->description ).'' : ''; if($depth != 0) { $description = $append = $prepend = ""; } $item_output = $args->before; $item_output .= ''; $item_output .= $args->link_before .$prepend.apply_filters( 'the_title', $item->title, $item->ID ).$append; $item_output .= $description.$args->link_after; $item_output .= ''; $item_output .= $args->after; $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } }
  • Was ich versuche, ist, dass nur die Kinder (Untermenüs) der aktiven Navigation angezeigt werden, einschließlich aller übergeordneten Elemente der ersten Ebene.

    Wenn Sie beispielsweise http://windows.microsoft.com/en-us/windows/home aufrufen, hat der Link “Download & Shop” keine Untermenüoptionen, aber sobald Sie zu dieser Seite navigieren, ist ein Untermenü vorhanden.

    Jede Hilfe würde sehr geschätzt werden!

    Danke vielmals

    Solutions Collecting From Web of "Nur Kinder (Unter-Navigation) des aktiven Menüelements anzeigen"

    Ok, basierend auf was ich denke, dass du von deiner Beschreibung willst, kannst du das über CSS erreichen. Sie müssen keinen benutzerdefinierten Walker dafür erstellen, es sei denn, Sie haben andere Gründe dafür.

    Wenn Sie genau hinschauen, wird bei aktivem Menüelement das folgende CSS auf das Element “li” angewendet

     current-menu-item current-menu-ancestor 

    Mit diesen Informationen können Sie also Ihre CSS-Regel schreiben, um die Untermenüs für diesen “li” -Eintrag anzuzeigen / auszublenden.

    Beispielsweise:

     li > ul { display:none; } li.current-menu-item > ul, li.current-menu-ancestor > ul { display:block; } 

    Dies kann einfach mit CSS erfolgen. Befolgen Sie die nächsten Schritte:

    1- Fügen Sie diesen Code in das Tag BODY ein:

     < ?php body_class(); ?> 

    So was:

     > 

    * Dieser Schritt fügt der aktuellen Seite eine class hinzu. (Es wird normalerweise verwendet, wenn wir eine Schaltfläche als markiert hinterlassen möchten, wenn wir auf ihrer Seite sind).

    2- WordPress erzeugt einen dynamischen Code für die Menüs, der seine eigenen classn hat. Mit diesem Code können wir auf die classn für die aktuelle Seite zugreifen:

     .menu li.current_page_item .menu li.current-menu-item 

    3- So können wir so etwas verwenden:

     .menu li ul{opacity:0;visibility:hidden} .menu li.current_page_item > ul, .menu li.current-menu-item > ul {display:block;opacity:1;visibility:visible} 

    Geprüft 🙂