Как на сайте 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' );


Как через PHP также вывести Описание пунктов меню?

1. Включите Настройки экрана – Описание
и заполните на пунктах меню это поле.

2. functions.php

// functions.php
class Menu_With_Description extends Walker_Nav_Menu {
    function start_el(&$output, $item, $depth = 0, $args = null, $id = 0) {
        $output .= '<li id="menu-item-' . $item->ID . '" class="' . implode(' ', $item->classes) . '">';
        $output .= '<a href="' . $item->url . '">';
        $output .= $item->title;
        if (!empty($item->description)) {
            $output .= ' <small>' . $item->description . '</small>';
        }
        $output .= '</a>';
    }
    
    function end_el(&$output, $item, $depth = 0, $args = null) {
        $output .= '</li>';
    }
}

3. Выводите В шаблоне:

<?php
wp_nav_menu(
    array(
        'menu'           => 18,
        'container'      => 'nav',
        'container_class'=> 'me',
        'menu_class'     => 'mat',
        'fallback_cb'    => false,
        'depth'          => 1,
        'walker'         => new Menu_With_Description(),
    )
);
?>

guest
Другие сообщения форума
Закрыть меню