2014-01-20 81 views
0

我剛開始與WP主題,我堅持與沃克類。我想輸出下面的代碼:WordPress的自定義菜單沃克

<ul> 
<li><a href="#" title="">Menu 1</a></li> 
<li><a href="#" title="">Menu 2</a></li> 
<li class="hasDropdown"> 
    <a href="#" title="">Menu 3 - Level 1</a> 
    <div> 
     <div> 
      <h5>Description 1</h5> 
      <ul> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
      </ul> 
     </div> 

     <div> 
      <h5>Description 2</h5> 
      <ul> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
      </ul> 
     </div> 

     <div> 
      <h5>Description 3</h5> 
      <ul> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
      </ul> 
     </div> 

     <div> 
      <h5>Description 4</h5> 
      <ul> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
       <li><a href="#" title="">Menu 3 - Level 2</a></li> 
      </ul> 
     </div> 
    </div> 
</li> 
<li><a href="#" title="">Menu 4</a></li> 
<li><a href="#" title="">Menu 5</a></li> 

我已經閱讀了大量的文章對步行者類,但每個做什麼,我試圖做的一小部分。我想把它們放在一起,並加深理解。我不確定如何開始/結束並設置下拉菜單。請任何人都可以幫忙?提前謝謝了。

我試圖複製和修改在導航菜單模板發現漫步者類,如下所示:

function start_lvl(&$output, $depth = 0, $args = array()) { 
    $indent = str_repeat("\t", $depth); 
    $output .= "\n$indent<div>\n"; 
    $output .= "\n$indent<h5></h5>\n"; 
    $output .= "\n$indent<ul class=\"sub-menu\">\n"; 
} 


function end_lvl(&$output, $depth = 0, $args = array()) { 
    $indent = str_repeat("\t", $depth); 
    $output .= "$indent</ul>\n"; 
    $output .= "\n$indent</div>\n"; 
} 

這給了我:

<div><h5><ul> 

我努力理解如何實現包裝div和.hasDropdown

+0

你能告訴我們到目前爲止你嘗試過哪些步驟? – Dutchie432

+0

@Dutchie我提供了一個我在上面獲得最大成功的例子。我已經嘗試了很多其他的定製課程,但最終得到了一些非常奇怪的結果,沒有像我想要的。 – mtwallet

回答

0

嘗試覆蓋一個更多的方法。 (在Walker_Nav_Menu延伸的Walker類中實施)。

function display_element($element, &$children_elements, $max_depth, $depth=0, $args, &$output) { 
    $id_field = $this->db_fields['id']; 

    if (! empty($children_elements[$element->$id_field])) { 
     $element->classes[] = "hasDropdown"; 
    } 

    parent::display_element($element, $children_elements, $max_depth, $depth, $args, $output); 
} 

並與div元素包裹,你有display_element方法(位於wp-includes/class-wp-walker.php)深入挖掘,但我敢肯定你會知道該怎麼做。

+0

感謝您的幫助,我很感激。通過在start/end_el中使用if語句檢查$深度,我也取得了一些成功。 – mtwallet

+0

如何修改代碼以輸出元素所具有的子元素的數量?所以類名輸出「hasDropdown 1」/「hasDropdown 2」等等。 – mtwallet

+0

'count($ children_elements [$ element - > $ id_field])'返回當前元素擁有的子元素的數量。所以像這樣'if(!empty($ children_elements [$ element - > $ id_field])){element-> classes [] =「hasDropdown - 」。count($ children_elements [$ element - > $ id_field]) ; }'應該工作。 – Dracris