08.11.2025

Как на сайте WordPress вывести готовое меню по ID через PHP-функцию wp_nav_menu() . Вывод меню wordpress через шорткод

Небольшой 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' );


guest
Закрыть меню