WP Добавление кнопки в меню навигации на уровни потомков

Подскажите как добавлять кнопку (показа\скрытия) элементов меню для Меню создаваемого в WordPress ? Приведу пример. Есть такое двухуровневое меню введите сюда описание изображения Второй уровень показывается по ховеру для десктопа и по нажатию на кнопку, для мобильной версии введите сюда описание изображения

Вопрос как добавлять данную кнопку <button class="btn_nav__mobil" type="button"></button> Если у элемента навигации есть потомки?

Вот мой код в funtions.php

// Инициализация меню    
add_theme_support('menus');
add_action('after_setup_theme', function () {
    register_nav_menus(array(
        'header_menu' => 'Меню в шапке',
    ));
});
/// Проба добавить кнопку если есть потомки
add_filter('walker_nav_menu_start_el', 'add_button_for_mobile', 10, 4);
function add_button_for_mobile($item_output, $item, $depth, $args)
{

    // Check we are on the right menu & right depth
    if ($args->theme_location != 'header_menu' ||  $depth !== 0 ) {
        return $item_output;
    }
    if ($depth == 0) {
        $new_output = '<button class="btn_nav__mobil" type="button"></button>'; // Add custom elems
        $new_output .= $item_output;
    }

    return $new_output;
}

Пока удалось просто добавлять кнопку первым элементам меню.(а надо только если есть потомки)

<ul class="nav navbar-nav nav-pos-right navbar-left nav-split">
                        <li><a href="#banner">Home</a></li>
                        <li><a href="#aboutUs">About Us </a></li>
                        <li><a href="#ourProducts">Products </a>
                        <button class="btn_nav__mobil" type="button"></button>
                            <ul class="block_tab__list">
                                <li class="block_tab__item"><a>River Sweepstakes System</a></li>
                                <li class="block_tab__item"><a>River Play-at-Home</a></li>
                                <li class="block_tab__item"><a>River TV Center</a></li>
                          ....
                            </ul>
                        </li>
</ul>

Ответы (1 шт):

Автор решения: Unbywyd

У вас есть два способа проверить имеются ли потомки у данного элемента меню:

function add_button_for_mobile($item_output, $item, $depth, $args) {
  if(in_array('menu-item-has-children', $item->classes)) {
        // Первый способ, ненадежный
  }

  global $wpdb;
  $has_children = $wpdb->get_var("SELECT COUNT(meta_id) FROM {$wpdb->prefix}postmeta WHERE meta_key='_menu_item_menu_item_parent' AND meta_value='".$item->ID."'");
  if($has_children) {
    // Проверить с помощью запроса в бд
  }
}

Проверка:

add_filter('walker_nav_menu_start_el', 'add_button_for_mobile', 10, 4);
function add_button_for_mobile($item_output, $item, $depth, $args) {

  global $wpdb;
  $has_children = $wpdb->get_var("SELECT COUNT(meta_id) FROM {$wpdb->prefix}postmeta WHERE meta_key='_menu_item_menu_item_parent' AND meta_value='".$item->ID."'");
  if($has_children) {
    $item_output = 'У меня есть дети ' .$item_output;
  }
  return $item_output;
}

add_action('wp_footer', function() {
    wp_nav_menu();
});

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка