Небольшой php код позволяющий вывести готовое меню на сайте под управлением WordPress по ID.
<?php wp_nav_menu( array( 'menu' => 3, // ID меню (замените на ваш ID) 'container' => 'nav', // Обертка для меню (например, <nav>) 'container_class' => 'main-navigation', // CSS-класс для обертки 'menu_class' => 'main-menu', // CSS-класс для <ul> 'fallback_cb' => false, // Отключаем вывод резервного меню, если меню не найдено ) ); ?>Если нужно вывести только 1 уровень меню
<?php wp_nav_menu( array( 'menu' => 306, 'container' => 'nav', 'container_class'=> 'main-na grid-container', 'menu_class' => 'main-menu', 'fallback_cb' => false, 'depth' => 1, // ← только верхний уровень ) ); ?>
Вывод меню wordpress через свой шорткод через ID меню
Код для functions.php (или плагина)
function menu_by_id_shortcode( $atts ) { $atts = shortcode_atts( array( 'id' => 0, // ID меню (обязательный параметр) ), $atts, 'menu_id' ); return wp_nav_menu( array( 'menu' => intval( $atts['id'] ), 'echo' => false, // возвращаем строку, а не выводим сразу 'fallback_cb' => false, ) ); } add_shortcode( 'menu_id', 'menu_by_id_shortcode' );Сам шорткод
[ menu_id id="359" ]
Еще один вариант:
Добавил вывод заголовка меню (по умолчанию отключен)[ menu_id id="316" title="true" label="Свой заголовок если необходимо" ]function menu_by_id_shortcode( $atts ) { $atts = shortcode_atts( array( 'id' => 0, // ID меню (обязательный параметр) 'title' => 'false', // Показывать заголовок: true/false 'label' => '', // Кастомный текст заголовка (если пусто — берётся название меню) ), $atts, 'menu_id' ); $menu_id = intval( $atts['id'] ); $menu_object = wp_get_nav_menu_object( $menu_id ); // Если меню не найдено if ( ! $menu_object || is_wp_error( $menu_object ) ) { return ''; } $output = ''; // Добавляем заголовок в нужном формате, если нужно if ( 'true' === $atts['title'] ) { $title_text = ! empty( $atts['label'] ) ? $atts['label'] : $menu_object->name; if ( ! empty( $title_text ) ) { $output .= '<div class="sidebar__title">' . esc_html( $title_text ) . '</div>'; } } // Добавляем само меню $menu_html = wp_nav_menu( array( 'menu' => $menu_id, 'echo' => false, 'fallback_cb' => false, 'container' => false, ) ); // Если меню пустое — не выводим ничего (включая заголовок) if ( ! empty( $menu_html ) ) { $output .= $menu_html; } else { return ''; } return $output; } add_shortcode( 'menu_id', 'menu_by_id_shortcode' );