2013-12-17 47 views
4

我在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); 
    } 
} 

但現在我的問題是,當我的子菜單或主菜單項目的孩子上單擊它成功地把我的子頁面,但是從父代中刪除「活動」類,並把它放在孩子(因爲它是當前查看的頁面)。我不希望它把這堂課放到孩子們的身邊,每當孩子們被觀看時,我都希望它們在那裏(在父母的項目上)。

任何幫助將不勝感激。

+0

如果你只需要在菜單父項風格的變化,你可以用CSS或jQuery的輕鬆管理。 – sven

回答

9

如果您希望在子菜單項處於活動狀態時將下拉祖父母激活,那麼您可以檢查當前菜單祖先或當前頁祖先..在您的情況下,我認爲current-菜單 - 祖先檢查是最有利的。

function special_nav_class($classes, $item){ 
    if(in_array('current-menu-item', $classes) || in_array('current-menu-ancestor', $classes)){ 
      $classes[] = 'active '; 
    } 
    return $classes; 
} 

我希望這會有所幫助,有一個愉快的一天:)

+2

謝謝soooooooooooooooooooooooooooo多Sovit Tamrakar。你是我的英雄。你讓我今天一整天都感覺很好。愛你的朋友;) – Ali

+0

很好..現在這讓我感覺很好:)祝你有美好的一天@Ali –

0

如果你想要的是那麼的WordPress提供您內置類爲它例如針對父元素添加一些樣式或其他屬性:

當你是一個孩子頁面上,你可以看到類樣current-menu-parent current-page-parent current_page_parent current_page_ancestor這些添加到WordPress的父頁面,你可以選擇其中任何目標的父元素。

+0

不錯的信息,但這些都是WordPress的內置類,假設我有我自己的類,那麼我如何告訴wordpress使用我的類在當前頁的父級或祖先菜單項上。這是我想知道的:) – Ali

相關問題