Ich implementiere ein Theme in WordPress. Dieses Thema hat ein oberes Navigationsmenü mit horizontalen Untermenüs unter jedem übergeordneten Element. Es setzt eine “aktive” Klasse auf die aktuell angezeigten übergeordneten Elemente (andernfalls werden die untergeordneten Untermenüelemente nicht angezeigt). Ich habe es irgendwie geschafft, die “aktive” Klasse für aktuelle übergeordnete Elemente beizubehalten, indem ich diese beiden Funktionen in functions.php verwendet habe.
/**
* Wp Nav Menu Customizer.
*/
function special_nav_class($classes, $item){
if( in_array('current-menu-item', $classes) ){
$classes[] = 'active ';
}
return $classes;
}
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
class SH_Last_Walker extends Walker_Nav_Menu{
function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {
$id_field = $this->db_fields['id'];
//If the current element has children, add class 'sub-menu'
if( isset($children_elements[$element->$id_field]) ) {
$classes = empty( $element->classes ) ? array() : (array) $element->classes;
$classes[] = 'has-sub-menu';
$element->classes =$classes;
}
// We don't want to do anything at the 'top level'.
if( 0 == $depth )
return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
//Get the siblings of the current element
$parent_id_field = $this->db_fields['parent'];
$parent_id = $element->$parent_id_field;
$siblings = $children_elements[ $parent_id ] ;
//No Siblings??
if( ! is_array($siblings) )
return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
//Get the 'last' of the siblings.
$last_child = array_pop($siblings);
$id_field = $this->db_fields['id'];
//If current element is the last of the siblings, add class 'last'
if( $element->$id_field == $last_child->$id_field ){
$classes = empty( $element->classes ) ? array() : (array) $element->classes;
$classes[] = 'last';
$element->classes =$classes;
}
return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
}
Aber jetzt ist mein Problem, dass, wenn ich auf ein Untermenü oder ein untergeordnetes Element eines übergeordneten Menüelements klicke, es mich erfolgreich zur untergeordneten Seite führt, aber die “aktive” Klasse vom übergeordneten Element entfernt und auf untergeordnete Elemente setzt (weil es die aktuell angezeigte Seite ist). Ich möchte nicht, dass diese Klasse Kindern zugewiesen wird, ich möchte, dass sie (auf dem übergeordneten Element) immer dann vorhanden ist, wenn ihre Kinder angezeigt werden.
Jede Hilfe wäre sehr willkommen.
Wenn Sie nur Stiländerungen für das übergeordnete Element im Menü benötigen, können Sie es einfach mit CSS oder jQuery verwalten.
– sven
17. Dezember 2013 um 6:34 Uhr