使用子菜单在WordPress中创建自定义导航

时间:2017-06-09 作者:puneet

我正在从事一个将HTML代码转换为WordPress的项目。我被导航部分卡住了。

现有导航:

<nav>
 <div class="dropdown">
  <div class="toggle"><a href="some link">Page name</a></div>
  <nav class="dropdown-list">
   <a class="dropdown-link" href="some link">Page name</a>
   <a class="dropdown-link" href="some link">Page name</a>
  </nav>
 </div>
 <a class="link with out sub menus" href="some link">Page name</a> 
 <a class="link with out sub menus" href="some link">Page name</a>
</nav>
到目前为止,我已经能够删除wp导航和添加的默认ul和li标签<nav> 要通过创建Walker类访问有子菜单,请执行以下操作:

class Description_Walker extends Walker_Nav_Menu
{
    function start_el(&$output, $item, $depth, $args)
    {
        $classes = empty($item->classes) ? array () : (array) $item->classes;
        $class_names = join(\' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item ) );
        !empty ( $class_names ) and $class_names = \' class="\'. esc_attr( $class_names ) . \'"\';
        $output .= "";
        $attributes  = \'\';
        !empty( $item->attr_title ) and $attributes .= \' title="\'  . esc_attr( $item->attr_title ) .\'"\';
        !empty( $item->target ) and $attributes .= \' target="\' . esc_attr( $item->target     ) .\'"\';
        !empty( $item->xfn ) and $attributes .= \' rel="\'    . esc_attr( $item->xfn        ) .\'"\';
        !empty( $item->url ) and $attributes .= \' href="\'   . esc_attr( $item->url        ) .\'"\';
        $title = apply_filters( \'the_title\', $item->title, $item->ID );
        $item_output = $args->before
        . "<a $attributes $class_names>"
        . $args->link_before
        . $title
        . \'</a>\'
        . $args->link_after
        . $args->after;
        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
    }


    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\\t", $depth);
        $output .= "\\n$indent<nav class=\'dropdown-list w-dropdown-list\'>\\n";
    }


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

}
现在我只能把两者都加起来<div> 到上面提到的有孩子的菜单。

1 个回复
最合适的回答,由SO网友:Bikash Waiba 整理而成

这是你的学步课

class Description_Walker extends Walker_Nav_Menu
{
     function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\\t", $depth);
        $output .= "\\n$indent<nav class=\'dropdown-list w-dropdown-list\'>\\n";
    }

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 )
    {
        $classes = empty($item->classes) ? array () : (array) $item->classes;
        $class_names = join(\' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item ) );
        !empty ( $class_names ) and $class_names = \' class="\'. esc_attr( $class_names ) . \'"\';
        $output .= "";
        $attributes  = \'\';
        !empty( $item->attr_title ) and $attributes .= \' title="\'  . esc_attr( $item->attr_title ) .\'"\';
        !empty( $item->target ) and $attributes .= \' target="\' . esc_attr( $item->target     ) .\'"\';
        !empty( $item->xfn ) and $attributes .= \' rel="\'    . esc_attr( $item->xfn        ) .\'"\';
        !empty( $item->url ) and $attributes .= \' href="\'   . esc_attr( $item->url        ) .\'"\';
        $title = apply_filters( \'the_title\', $item->title, $item->ID );
        $item_output = $args->before;
        $wraper = ($args->walker->has_children) ? \'<div  class="toggle">\':\'\';
        $item_output.= $wraper
                    . "<a $attributes $class_names>"
                    . $args->link_before
                    . $title
                    . \'</a>\';
         $wraper_end = ($args->walker->has_children) ? \'</div>\':\'\';
         $item_output.=  $wraper_end
                    . $args->link_after
                    . $args->after;
        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
    }





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

}
这是标题的代码。php我希望您已经注册了主菜单。。

 wp_nav_menu( array(\'menu\' => \'Main\', \'theme_location\' => \'Primary\',\'container\' => \'\', \'items_wrap\' => \'<nav>%3$s</nav>\' , \'walker\' => new Description_Walker()));

结束