【问题标题】:Wordpress Custom Menu WalkerWordPress 自定义菜单助行器
【发布时间】:2014-01-20 15:09:03
【问题描述】:

我刚开始使用 WP 主题,但我坚持使用 walker 类。我正在尝试输出以下代码:

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

我已经阅读了很多关于 walker 类的文章,但每篇文章都只做了我想做的一小部分。我想把它们放在一起并得到更好的理解。我不确定如何开始/结束和设置具有下拉级别的菜单。请问有人可以帮忙吗?非常感谢。

我已尝试复制和修改在 nav-menu-template 中找到的 walker 类,如下所示:

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

【问题讨论】:

  • 您能告诉我们到目前为止您尝试了哪些步骤吗?
  • @Dutchie 我提供了一个我在上面取得了最大成功的例子。我已经尝试了很多其他的类自定义,但最终得到了一些非常奇怪的结果,与我想要的完全不同。

标签: html wordpress class


【解决方案1】:

尝试覆盖另外一种方法。 (它在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),但我相信您会知道该怎么做。

【讨论】:

  • 感谢您的帮助,非常感谢。通过在 start / end_el 中使用 if 语句检查 $depth,我也取得了一些成功。
  • 如何修改您的代码以输出元素的子元素数量?所以类名会输出“hasDropdown 1”/“hasDropdown 2”等等。
  • count($children_elements[ $element-&gt;$id_field ]) 返回当前元素的子元素数。所以像if (! empty( $children_elements[$element-&gt;$id_field] )) { $element-&gt;classes[] = "hasDropdown-".count($children_elements[ $element-&gt;$id_field ]); } 这样的东西应该可以工作。
  • 再次感谢您的帮助。我让那部分工作得很好。我认为仍然在为 HTML 格式而苦苦挣扎,但已经到了那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 2012-10-12
相关资源
最近更新 更多