我在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