Формирование меню в WordPress шаблонах быстро и удобно
Для, практически, любого сайта необходимо формировать навигационное меню. Есть два пути: зашивать навигацию жестко в шаблон и правильный. Вот о правильном методе применительно к созданию шаблонов в WordPress мы и поговорим.
Для начала, перейдем в админскую панель вродпресса и создадим меню. [ВНЕШНИЙ ВИД]->[МЕНЮ]. Мы можем создавать сколько угодно менюшек, главное, самим в них не запутаться! Новое меню назовем, к примеру main. Интерфейс создания и добавления пунктов меню на странице администрирования очень прост и дополнительных комментариев не требует. Нас интересует способ вывода его шаблоне. А очень просто:
1 |
<?php wp_nav_menu('menu=main'); ?> |
Вот и всё!
Правда, то, что получилось в моем шаблоне с использование bootstrap выглядит более чем уныло, поэтому сходим за документацией и доведем код до следующего состояния:
1 2 3 4 5 6 |
<?php wp_nav_menu(array( "container_class"=>"collapse navbar-collapse", "container_id" => "bs-example-navbar-collapse-1", "menu_class" => "nav navbar-nav" )); ?> |
Что мы сделали? Мы указали название класса для элемента — обертки менюшки и его идентификатор, а так же классы для элемента списка вывода меню, чтобы было понятнее, вот результирующий html код:
1 2 3 4 5 6 |
<div id="bs-example-navbar-collapse-1" class="collapse navbar-collapse"> <ul id="menu-main" class="nav navbar-nav"> <li id="menu-item-6" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-6 active "><a href="http://site/">Главная</a></li> <li id="menu-item-12" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12"><a href="http://site/page/">Page Title</a></li> </ul> </div> |
Всё на своих местах. В конце статьи я приведу полный перечень параметров для функции. А сейчас поделюсь ещё одним трюком.
Самые внимательные заметили, что в первом пункте меню присутствует ещё один класс у элемента списка — «active». Ведь в большинстве шаблонов активный элемент, т.е. элемент той страницы, на которой мы сейчас находимся выделятся другим стилем. И по-умолчанию в WordPress не задается признак активного элемента меню. Чтобы он появился добавим следующий код перед вызовом функции отображения меню:
1 2 3 4 5 6 7 8 9 |
<?php add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2); function special_nav_class($classes, $item){ if( in_array('current-menu-item', $classes) ){ $classes[] = 'active '; } return $classes; } ?> |
И будет нам счастье! )
Ну и как обещал, список параметров для функции wp_nav_menu:
menu – выбранный идентификатор для меню – ID, slug или название меню.
container – меню UL по умолчанию «оборачивается» в контейнер DIV с помощью данной настройки.
container_class – указывает класс контейнера, по умолчанию его значение menu-{menu slug}-container, то есть в нашем случае, например, будет класс menu-first-container.
container_id – можно добавить контейнеру ID, по умолчанию не указано.
menu_class – класс для элемента меню UL, его значение – menu.
menu_id – ID для элемента ul, по умолчанию равно значению menu-{slug}
echo – если вы не хотите отображать меню, а возвращать значение функции используйте для этой настройки значение 0.
fallback_cb – если меню не существует, вызывается функция wp_page_menu.
before – задает текст, который выводится перед ссылкой А.
after – текст после ссылки А, по умолчанию он, как и предыдущий, пустые.
link_before – выводит фразу перед текстом ссылки, не задано.
link_after – выводится после текста ссылки, тоже пустое.
depth – задает количество уровней иерархии для вывода меню, значение по умолчанию 0 выводит все меню целиком.