Как через хук в мобильное меню добавить второе меню по ID? на сайте с темой OCEAN WP
до этого я выводил (в теме OCEAN WP)
/** * Выводим меню сразу в HTML — sidr заберёт их мгновенно */ add_action( 'wp_footer', 'my_output_menus_for_sidr', 1 ); function my_output_menus_for_sidr() { ?> <div id="site-navigation-wrap" class="clr" style="position:absolute;left:-9999px;top:-9999px;"> <nav id="site-navigation" class="navigation main-navigation clr" role="navigation"> <?php wp_nav_menu( array( 'menu' => 18, 'container' => false, 'menu_class' => 'main-menu dropdown-menu sf-menu', 'fallback_cb' => false, ) ); wp_nav_menu( array( 'menu' => 316, 'container' => false, 'menu_class' => 'main-menu dropdown-menu sf-menu', 'fallback_cb' => false, ) ); ?> </nav> </div> <?php }
Еще один вариант:
/** * Безопасное добавление меню 18 в начало мобильного меню (гарантированное удаление иконок) */ add_filter( 'wp_nav_menu_items', 'safe_prepend_menu_18', 9999, 2 ); function safe_prepend_menu_18( $items, $args ) { // Срабатывает только для мобильного меню if ( isset( $args->theme_location ) && $args->theme_location === 'mobile_menu' ) { // 1. Временно отключаем этот фильтр, чтобы внутренний вызов wp_nav_menu не зациклился remove_filter( 'wp_nav_menu_items', 'safe_prepend_menu_18', 9999 ); // 2. Получаем HTML меню 18 $menu_18 = wp_nav_menu( array( 'menu' => 18, 'container' => false, 'echo' => false, 'fallback_cb' => false, 'items_wrap' => '%3$s', // Отдаем только <li>, без обертки <ul> ) ); // 3. Включаем фильтр обратно для остальных меню на странице add_filter( 'wp_nav_menu_items', 'safe_prepend_menu_18', 9999, 2 ); // 4. Если меню 18 не пустое, очищаем его от иконок и добавляем разделитель if ( ! empty( $menu_18 ) ) { // Массив регулярных выражений для точечного и гарантированного удаления иконок $patterns = [ // Удаляем <i> с классом, содержащим "icon" (например, icon-rocket, sidr-class-icon) '/<i\b[^>]*class="[^"]*icon[^"]*"[^>]*>\s*<\/i>/is', // Удаляем любые оставшиеся пустые теги <i> (даже без класса icon) '/<i\b[^>]*>\s*<\/i>/is', // Удаляем инлайн SVG '/<svg\b[^>]*>.*?<\/svg>/is', // Удаляем <span> с классами иконок (включая sidr, fa, dashicons) '/<span\b[^>]*class="[^"]*(?:icon|dashicons|fa|mdi|sidr)[^"]*"[^>]*>\s*<\/span>/is', ]; $menu_18 = preg_replace( $patterns, '', $menu_18 ); // Убираем возможные лишние пробелы, оставшиеся после удаления тегов $menu_18 = preg_replace( '/\s+/', ' ', $menu_18 ); $separator = '<li class="mobile-menu-separator" style="border-top: 2px solid #e0e0e0; margin: 20px 15px; list-style: none; pointer-events: none;"></li>'; $items = $menu_18 . $separator . $items; } } return $items; }