2014-01-20 84 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