使用wp_NAV_MENU换行链接和.子菜单

时间:2014-04-22 作者:Ralphonz

我想用div将每个子菜单ul和它前面的标签包装起来。

我可以使用wP-nav\\u菜单的“before”属性创建开始标记,如下所示:

wp_nav_menu(array(
    \'before\' => \'<div class="child-wrap">\'
));
然后,div需要在链接之后以及子菜单之后关闭,因此输出为:

<ul>
    <li>
        <div class="child-wrap">
            <a href="...">Menu Item</a>
        </div>
    </li>
    <li>
        <div class="child-wrap">
            <a href="...">Menu Item</a>
            <ul class="sub-menu">
              ....
            </ul>
        </div>
    </li>
</ul>
我知道我可以使用助行器,但我真的不明白它是如何工作的(在助行器类中),所以如果有任何帮助,我将不胜感激。。。

2 个回复
SO网友:Ralphonz

多亏了读了这篇文章,我自己也弄明白了:http://code.tutsplus.com/tutorials/understanding-the-walker-class--wp-25401

我创建了一个自定义助行器:

class Child_Wrap extends Walker_Nav_Menu
{
    function end_el(&$output, $item, $depth)
    {
        $indent = str_repeat("\\t", $depth);
        $output .= "$indent</div></li>\\n";
    }
}
并使用wp\\U nav\\U菜单:

function main_nav() {
wp_nav_menu(array(
    \'before\' => \'<div class="child-wrap">\',       // before the menu
    \'walker\' => new Child_Wrap 
));
}

SO网友:Douglas.Sesar

http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items

您可以使用此示例开始:

    // Get the nav menu based on $menu_name (same as \'theme_location\' or \'menu\' arg to wp_nav_menu)
// This code based on wp_nav_menu\'s code to get Menu ID from menu slug

$menu_name = \'custom_menu_slug\';

if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );

$menu_items = wp_get_nav_menu_items($menu->term_id);

$menu_list = \'<ul id="menu-\' . $menu_name . \'">\';

foreach ( (array) $menu_items as $key => $menu_item ) {
    $title = $menu_item->title;
    $url = $menu_item->url;
    $menu_list .= \'<li><a href="\' . $url . \'">\' . $title . \'</a></li>\';
}
$menu_list .= \'</ul>\';
} else {
$menu_list = \'<ul><li>Menu "\' . $menu_name . \'" not defined.</li></ul>\';
}
// $menu_list now ready to output

结束