Я реализую тему в Wordpress. В этой теме есть главное меню навигации с горизонтальными подменю под каждым родительским элементом. Он помещает «активный» класс в текущие родительские элементы, просматриваемые в данный момент (в противном случае он не будет показывать элементы дочерних элементов для детей). Мне каким-то образом удалось сохранить «активный» класс в текущих родительских элементах, используя эти две функции в functions.php.Wordpress - поддерживайте «активный» класс в исходном пункте меню
/**
* 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);
}
}
Но теперь моя проблема заключается в том, что, когда я нажимаю на подменю или ребенка любого пункта меню родительского успешно берет меня на странице ребенка, но удаляет «активный» класс от родителей и ставит его на детей (из-за него просматриваемая страница). Я не хочу, чтобы этот класс передавался детям, я хочу, чтобы он был там (на родительском элементе), когда он просматривается детьми.
Любая помощь будет высоко оценена.
Если вам просто нужны изменения стиля для родительского элемента в меню, вы можете управлять им легко с помощью CSS или JQuery. – sven