Додати контейнер у підменю nav_menu


9

Чи є спосіб я обернути діва навколо ul.sub-меню wp_nav_menu

Так, наприклад, буде розміщена розмітка

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

Де "підменю-обгортання" - це спеціальний розділ.

Чи можливо це?

Відповіді:


21

Використовуйте власну ходунку , розширюйте методи 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
    )
);

Чи можна вносити зміни на основі кожного пункту меню? наприклад, чи доступний клас пунктів меню всередині, Walker_Nav_Menuі це діти?
Ден.

@Dan. Так.
фуксія

@fuxia, чи підходить цей підхід для WP 5+ або ви рекомендуєте альтернативну методику, щоб виконати те саме?
klewis

@klewis Це все одно має працювати.
фуксія

Як це зробити тільки на першому рівні.
jho1086
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.