Добавляем меню в свой шаблон на CMS WordPress

26.11.2017

Регистрируем и выводим произвольное меню, созданное в панели: «Внешний вид > Меню» (Appearance > Menus).

Регистрируем меню

add_action('after_setup_theme', function(){
  register_nav_menus( array(
    'main_menu' => __( 'Primary menu', 'crea' ),
    'foot_menu' => __( 'Footer menu', 'crea' ),  
  ) );
});

Второй вариант регистрации меню (не знаю, на сколько он правильный, поэтому лучше использовать первый вариант)

if (function_exists('register_nav_menu')) {
  register_nav_menus(array(
    'main_menu' => __( 'Primary menu', 'crea' ),
    'foot_menu' => __( 'Footer menu', 'crea' ), 
  ));
}

Выводим меню

<?php wp_nav_menu('theme_location=main-menu&container_class=top-menu&container_id=&menu_id=&menu_class='); ?>

Второй вариант вывода меню

<?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?>

Более подробно про регистрацию и вывод меню в шаблоне

Использование

<?php wp_nav_menu( $args ); ?>
wp_nav_menu( array(
  'theme_location'  => ''               // (string) Расположение меню в шаблоне. (указывается ключ которым было зарегистрировано меню в функции 
  'menu'            => '',              // (string) Название выводимого меню (указывается в админке при создании меню, приоритетнее чем указанное местоположение theme_location - если указано, то параметр theme_location игнорируется)
  'container'       => 'div',           // (string) Контейнер меню. Обворачиватель ul. Указывается тег контейнера (по умолчанию в тег div)
  'container_class' => '',              // (string) class контейнера (div тега)
  'container_id'    => '',              // (string) id контейнера (div тега)
  'menu_class'      => 'menu',          // (string) class самого меню (ul тега)
  'menu_id'         => '',              // (string) id самого меню (ul тега)
  'echo'            => true,            // (boolean) Выводить на экран или возвращать для обработки
  'fallback_cb'     => 'wp_page_menu',  // (string) Используемая (резервная) функция, если меню не существует (не удалось получить)
  'before'          => '',              // (string) Текст перед <a> каждой ссылки
  'after'           => '',              // (string) Текст после </a> каждой ссылки
  'link_before'     => '',              // (string) Текст перед анкором (текстом) ссылки
  'link_after'      => '',              // (string) Текст после анкора (текста) ссылки
  'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
  'depth'           => 0,               // (integer) Глубина вложенности (0 - неограничена, 2 - двухуровневое меню)
  'walker'          => ''              // (object) Класс собирающий меню. Default: new Walker_Nav_Menu
) );

Аргументы параметра $args

theme_location(строка)
Идентификатор расположение меню в шаблоне. Идентификатор, указывается при регистрации меню функцией register_nav_menu().
По умолчанию: ''

menu(строка)
Меню которое нужно вывести. Соответствие: id, слаг или название меню.
По умолчанию: ''

container(строка)
Чем оборачивать ul тег. Допустимо: div или nav.
Если не нужно оборачивать ничем, то пишем false: container => false.
По умолчанию: div

container_class(строка)
Значение атрибута class у контейнера меню.
По умолчанию: menu-{menu slug}-container

container_id(строка)
Значение атрибута id у контейнера меню.
По умолчанию: ''

menu_class(строка)
Значение атрибута class у тега ul.
По умолчанию: menu

menu_id(строка)
Значение атрибута id у тега ul.
По умолчанию: слаг меню

echo(логическое)
Выводить на экран (true) или возвратить для обработки (false).
По умолчанию: true

fallback_cb(строка)
Функция для обработки вывода, если никакое меню не найдено.
Передает все аргументы $args указанной тут функции.
Установите пустую строку » или ‘__return_empty_string’, чтобы ничего не выводилось, если меню нет.
По умолчанию: wp_page_menu

before(строка)
Текст перед тегом <a> в меню.
По умолчанию: ''

after(строка)
Текст после каждого тега в меню.
По умолчанию: ''

link_before(строка)
Текст перед анкором каждой ссылки в меню.
По умолчанию: ''

link_after(строка)
Текст после анкора каждой ссылки в меню.
По умолчанию: ''

items_wrap(строка)
Нужно ли оборачивать элементы в тег ul. Если нужно, указывается шаблон обертки.
По умолчанию: '<ul id="%1$s" class="%2$s">%3$s</ul>'

depth(число)
Сколько уровень вложенных друг в друга ссылок показывать. 0 — все уровни.

walker(объект)
Класса, который будет использоваться для построения меню. Нужно указывать объект, а не строку, например new My_Menu_Walker(). По умолчанию: Walker_Nav_Menu(). Как использовать смотрите ниже…
По умолчанию: Walker_Nav_Menu

item_spacing(строка)
Оставлять или нет переносы строк в HTML коде меню. Может быть: preserve или discard
По умолчанию: 'preserve'

Пример

Выводить меню, только если оно существует

По умолчанию, если меню нет, то вместо него будут выведены страницы сайта. Но если нужно выводить меню, только в том случае когда оно создано в админ-панели, укажите параметр fallback_cb как '__return_empty_string':

wp_nav_menu( array(
  'theme_location' => 'primary-menu',
  'fallback_cb' => '__return_empty_string'
) );

Больше информации и примеров:

Полезная инфа:

Оставить комментарий