it-swarm.xyz

Если у него есть несколько дочерних уровней,

У меня есть навигационное меню WP, и мне нужно добавить класс в любой <li> верхнего уровня, если этот элемент имеет более одного уровня дочерних элементов (то есть его дочернее подменю также имеет подменю). Как это:

<ul>
    <li>Parent
        <ul class="sub-menu">
            <li>Sublink1</li>
            <li>Sublink2</li>
        </ul>
    </li>
    <li>Parent</li>
    <li class="ADD-CLASS-HERE">Parent <!-- add class to this item -->
        <ul class="sub-menu">
            <li>Sublink1</li>
            <li>Sublink2</li>
            <li>Sublink3
                <ul class="sub-menu">
                    <li>Sublink1</li>
                    <li>Sublink2</li>
                </ul>
            </li>
        </ul>
    </li>
    <li>Parent</li>
    <li>Parent</li>
    <li>Parent
        <ul class="sub-menu">
            <li>Sublink1</li>
            <li>Sublink2</li>
        </ul>
    </li>
</ul>

Я предполагаю, что мне нужно использовать Уокер, чтобы достичь этого. (Я не хочу добавлять класс вручную в настройках меню WP.) Я попытался поработать с некоторыми примерами, которые я нашел, но мне не удалось добавить класс к предмет предка уровня 0. Спасибо за любую помощь!

4
LBF

Не уверен, но, может быть, что-то подобное будет работать? Добавьте в functions.php. Смотрите объяснение здесь .

//This function is responsible for adding "my-parent-item" class to parent menu item's
function add_menu_parent_class( $items ) {
$parents = array();
foreach ( $items as $item ) {
    //Check if the item is a parent item
    if ( $item->menu_item_parent && $item->menu_item_parent > 0 ) {
        $parents[] = $item->menu_item_parent;
    }
}

foreach ( $items as $item ) {
    if ( in_array( $item->ID, $parents ) ) {
        //Add "menu-parent-item" class to parents
        $item->classes[] = 'my-parent-item';
    }
}

return $items;
}

//add_menu_parent_class to menu
add_filter( 'wp_nav_menu_objects', 'add_menu_parent_class' ); 

Так что, если вы можете использовать Jquery, вы можете сделать это так:

$('ul li.menu-parent-item:has(ul ul)').addClass('your class');
3
Dejo Dekic