Fügen Sie span im oberen Menüelement mit verschachtelten itens hinzu

Ich habe Beispiele gefunden, die eine class zu Top-Level-Itens hinzufügen, so dass wir einen Pfeil im Menü itens mit Untertiteln anzeigen können, aber es scheint schrecklich, mit den bereits eingebauten WordPress-classn fertig zu werden, kann den Pfeil nicht mit aktuellem und css-Hover anzeigen ruiniert alle Staaten.

Gibt es eine Möglichkeit, stattdessen einen im übergeordneten li hinzuzufügen ?!

Danke vielmals!

Solutions Collecting From Web of "Fügen Sie span im oberen Menüelement mit verschachtelten itens hinzu"

Sie können den walker_nav_menu_start_el Filter verwenden:

 add_filter( 'walker_nav_menu_start_el', 'wpse_add_arrow',10,4); function wpse_add_arrow( $item_output, $item, $depth, $args ){ //Only add class to 'top level' items on the 'primary' menu. if('primary' == $args->theme_location && $depth ==0){ $item_output .=''; } return $item_output; } 

Dies setzt voraus, dass Sie wp_nav_menu( array( 'theme_location' => 'primary') ); um das Menü anzuzeigen.


Aktualisierte Antwort als Antwort auf Kommentare. Um die span nur Elementen auf oberster Ebene hinzuzufügen, die span Elemente haben, müssen Sie einen benutzerdefinierten Rollator verwenden:

 class SH_Arrow_Walker_Nav_Menu extends Walker_Nav_Menu { function start_lvl(&$output, $depth, $args) { $indent = str_repeat("\t", $depth); if('primary' == $args->theme_location && $depth ==0){ $output .=''; } $output .= "\n$indent
    \n"; } }

Um dies zu verwenden, müssen Sie das wp_nav_menu Argument in wp_nav_menu :

 wp_nav_menu( array( 'theme_location' => 'primary', 'walker'=> new SH_Arrow_Walker_Nav_Menu() ) ); 

Um auf die vorherige Antwort zu erweitern, ist hier zu erkennen, ob ein Element ein übergeordnetes Menüelement ist, ohne die Walker-class zu verwenden

 add_filter( 'walker_nav_menu_start_el', 'cfw_add_arrow',10,4); function cfw_add_arrow( $output, $item, $depth, $args ){ //Only add class to 'top level' items on the 'primary' menu. if('primary' == $args->theme_location && $depth === 0 ){ if (in_array("menu-item-has-children", $item->classes)) { $output .='arrow'; } } return $output; } 

Bitte korrigieren Sie mich, wenn diese PHP- in_array Prüfung in einigen Situationen fehlschlägt, bisher hatte ich keine Probleme damit.