将容器添加到NAV_Menu子菜单

时间:2013-01-03 作者:Dean Elliott

有没有办法在wp\\u nav\\u menu的ul上加一个div。子菜单

例如,标记将从

<ul class="menu">

    <li><a href="/">Item 1</a></li>
    <li>
        <a href="/">Item 2</a>

        <ul class="sub-menu">

            <li><a href="/">Item 1</a></li>
            <li><a href="/">Item 1</a></li>

        </ul>
   </li>
    <li><a href="/">Item 1</a></li>
    <li><a href="/">Item 1</a></li>

</ul>
到这个

<ul class="menu">

    <li><a href="/">Item 1</a></li>
    <li>
        <a href="/">Item 2</a>

        <div class="sub-menu-wrap">

            <ul class="sub-menu">

                <li><a href="/">Item 1</a></li>
                <li><a href="/">Item 1</a></li>

            </ul>

        </div>

   </li>

    <li><a href="/">Item 1</a></li>
    <li><a href="/">Item 1</a></li>

</ul>
其中“sub menu wrap”是自定义div。

这可能吗?

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

Use a custom walker, 扩展方法start_lvl()end_lvl.

未测试的示例代码:

class WPSE_78121_Sublevel_Walker extends Walker_Nav_Menu
{
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\\t", $depth);
        $output .= "\\n$indent<div class=\'sub-menu-wrap\'><ul class=\'sub-menu\'>\\n";
    }
    function end_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\\t", $depth);
        $output .= "$indent</ul></div>\\n";
    }
}
主题中的用法:

wp_nav_menu(
    array (
        \'theme_location\' => \'your-theme-location-EDIT-THIS\',
        \'walker\'         => new WPSE_78121_Sublevel_Walker
    )
);

SO网友:Lovor

建议的解决方案与WordPress不兼容-WordPress默认代码和过滤器被忽略。我在这里给出了更加优雅的解决方案,它可以保持所有过滤器,如“nav\\u menu\\u submenu\\u css\\u class”和其他WP默认代码正常工作:

<?php
/**
 * Wraps sub-menus in div element
 */
class My_Menu_Walker extends Walker_Nav_Menu {

    public function start_lvl( &$output, $depth = 0, $args = null ) {
        $output .=
        \'<div class="wrapper">\';
        parent::start_lvl($output, $depth, $args);
    }

    public function end_lvl( &$output, $depth = 0, $args = null ) {
        parent::end_lvl($output, $depth, $args);
        $output .= \'</div>\';
    }

}

结束

相关推荐

从外部PHP脚本调用Functions.php中的函数

Preamble<我试图确保以前没有人问过这个问题。我刚开始使用StackExchange,所以我可能没有这么做。我不介意责备;厚皮肤,我学得很快:)THE PROBLEM我编写了一个函数并将其放置在主题函数中。phpfunction serverConnect() { $serverAccess = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if (!$serverAccess) { die(\"