В WordPress часто используют одно или два меню, которое форматируется с помощью списков <ul>
и вложенных в него <li>
. Однако, далеко не всегда нам эти элементы нужны в верстке. В этой статье рассмотрим, как можно изменить форматирование меню в WordPress.
Для того чтобы добавить меню в WordPress, необходимо сделать 2 действия:
- В файле functions.php необходимо добавить поддержку одного или нескольких меню, например, так:
1 2 3 4 5 6 | register_nav_menus( array( 'main-menu' => esc_html__( 'Primary', 'theme-name' ), 'footer-menu' => esc_html__( 'Footer menu', 'theme-name' ), ) ); |
2. Добавить вывод меню в файле темы. Как правило, это файл header.php:
1 2 3 4 5 6 7 | wp_nav_menu( array( 'theme_location' => 'main-menu', 'menu_id' => 'primary-menu', 'items_wrap' => '<ul id="%1$s" class="unstyled %2$s">%3$s</ul>' ) ); |
По умолчанию к списку добавляется атрибут class="menu"
. Если вам нужно добавить еще какой-либо класс, то вы указываете его в параметре 'items_wrap'
.
По умолчанию в качестве "обертки" для ссылок в меню выступает элемент <ul>
с элементами <li>
. Это удобно, так как списки можно вкладывать друг в друга и формировать вырпадающее меню с помощью позиционирования. Однако есть варианты меню, в которых совскм не нужны списки, т.к. обычно ссылок там немного + нужно выстроить их друг рядом с другом. Можно, конечно, воспользоваться свойствами Flexbox-модели, но по умолчанию ссылки являются строчными элементами, так что выстраиваются в один ряд сами по себе.
Поэтому имеет смысл убрать элементы <ul>
и <li>
из разметки меню. Пробуем это сделать с помощью функции wp_nav_menu()
, указав параметр 'items_wrap' => '%3$s'
. Кроме того, можно добавить параметр 'depth'=> 1
, который регулирует глубину вложения меню. У нас не будет вложенности списков, поэтому глубина указывается равной 1.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <p class="terms"> <?php wp_nav_menu( array( 'theme_location' => 'footer-menu', 'menu_id' => 'footer-menu', 'container' => false, 'items_wrap' => '%3$s', 'depth'=> 1, ) ); ?> </p> |
На скриншоте видно, что <ul>
мы действительно убрали, а вот элементы <li>
никуда не делись:
Кроме того, элемент <p class="terms">...</p>
, в который был вложен вызов функции wp_nav_menu()
переместился до списка с ссылками, а после списка возник новый абзац, т.к. браузер Chrome таким образом исправил несемантическую разметку, в которой в абзац нельзя вкладывать элементы <li>
.
Тут нужно немного изменить код, убрав с помощью параметра 'echo' => false
вывод меню и удалив при выводе все <li>
перед <a>
с помощью функции strip_tags($menu, '<a>')
:
1 2 3 4 5 6 7 8 9 10 | $menu = wp_nav_menu( array( 'echo' => false, 'theme_location' => 'footer-menu', 'container' => false, 'items_wrap' => '%3$s', 'depth'=> 1, ) ); echo strip_tags($menu, '<a>' ); |
То есть мы сохраняем в переменную $menu
вывод нашего меню, а затем с помощью функции strip_tags()
из тегов оставляем только <a>
.
В результате в коде увидим следующее:
То, что и требовалось. Теги <li>
теперь отсутствуют.
Еще один способ убрать ссылки можно реализовать с помощью класса Walker_Nav_Menu.