这种格式是否可以与定制的Nav Walker类一起使用?

时间:2019-02-21 作者:Mr DC

我希望在wordpress菜单上有以下输出

<nav>
  <a href="#">Link</a>
  <a href="#">Link</a>
  <aside>
   <a href="#" class="custom-class">Sub Menu Trigger</a>
   <div>
    <a href="#">Sub Menu Link</a>
    <a href="#">Sub Menu Link</a>
  </div>    
 </aside>
</nav>
然而,我不知道如何使用导航助行器来实现这一点(我仍在思考这一点)。是否有可能:

剥离了ul/li,除了包装子菜单父菜单之外,我不确定这是否可行。如果没有,有没有其他方法可以帮助我?还是有可能,但很复杂?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

是的,有可能。。。您只需编写自己的Walker类。以下是一个起点:

class My_Custom_Walker_Nav_Menu extends Walker_Nav_Menu {

    public function start_lvl( &$output, $depth = 0, $args = array() ) {
        if ( $depth ) {
            $output .= \'<aside><a href="#" class="custom-class">Sub Menu Trigger</a><div>\';
        }
    }

    public function end_lvl( &$output, $depth = 0, $args = array() ) {
        if ( $depth ) {
            $output .= \'</div></aside>\';
        }
    }

    public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        $args = apply_filters( \'nav_menu_item_args\', $args, $item, $depth );

        $atts = array();
        $atts[\'title\']  = ! empty( $item->attr_title ) ? $item->attr_title : \'\';
        $atts[\'target\'] = ! empty( $item->target )     ? $item->target     : \'\';
        $atts[\'rel\']    = ! empty( $item->xfn )        ? $item->xfn        : \'\';
        $atts[\'href\']   = ! empty( $item->url )        ? $item->url        : \'\';

        $atts = apply_filters( \'nav_menu_link_attributes\', $atts, $item, $args, $depth );

        $attributes = \'\';
        foreach ( $atts as $attr => $value ) {
            if ( ! empty( $value ) ) {
                $value = ( \'href\' === $attr ) ? esc_url( $value ) : esc_attr( $value );
                $attributes .= \' \' . $attr . \'="\' . $value . \'"\';
            }
        }

        $title = apply_filters( \'the_title\', $item->title, $item->ID );
        $title = apply_filters( \'nav_menu_item_title\', $title, $item, $args, $depth );

        $item_output = $args->before;
        $item_output .= \'<a\'. $attributes .\'>\';
        $item_output .= $args->link_before . $title . $args->link_after;
        $item_output .= \'</a>\';
        $item_output .= $args->after;

        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
    }

    public function end_el( &$output, $item, $depth = 0, $args = array() ) {
        // don\'t do anything - elements have no endings
    }

}

相关推荐

WordPress自定义Walker菜单类

嘿,伙计们,我正在自定义wordpress walker类,以便将自定义类添加到导航级别。基本上有三个级别的导航。代码如下:<ul class=\"rd-navbar-nav\"> <li class=\"rd-nav-item active\"><a class=\"rd-nav-link\" href=\"#\">Home</a></li> <li class=\"rd-nav-item rd-navbar--h