Обычное меню WordPress выглядит так:
Главная | Блог | О нас | Контакт
Но я видел много страниц с описаниями по этим ссылкам:
Домашняя страница | Наши блоги | О нас | Контакты
….познакомьтесь с нами…| читать дальше| основная информация| Форма обратной связи
Как этого добиться?
(Я хочу, чтобы это была основная функция для всех моих тем, поэтому никаких плагинов, пожалуйста, я просто хочу знать, как это делается)
Вам нужен пользовательский ходок для навигационного меню.
По сути, вы добавляете параметр
'walker'
кwp_nav_menu()
параметрам и вызываете экземпляр расширенного класса:Класс
Description_Walker
расширяетWalker_Nav_Menu
и изменяет функциюstart_el( &$output, $item, $depth, $args )
поиска$item->description
.Основной пример:
Или, в качестве альтернативы, как прокомментировал @nevvermind, вы можете унаследовать все функции родительской
start_el
функции и просто добавить описание к$output
:Пример вывода:
Теперь включите поле описания
wp-admin/nav-menus.php
, чтобы получить возможность редактировать это поле. Если вы этого не сделаете, WP просто выкинет в него весь ваш пост.Дальнейшее чтение:
И это все.
Если для вас наследование != перепишите весь метод, просто оставьте то же имя, попробуйте следующее:
public function start_el(&$output, $item, $depth, $args) { parent::start_el($output, $item, $depth, $args); $output.= sprintf('<i>%s</i>', esc_html($item->description)); }
@nevvermind Вы должны хотя бы проверить, есть ли в описании какое-то содержание. 😉 Позиция описания в моем примере кода — это самый простой способ проиллюстрировать решение. Если вам нужно получить описание в якоре, вам придется перестроить всю функцию.
да, вам придется написать весь метод, без сомнения, но для людей, которым нужно (скажем…) добавить его, это может просто избавить их от многих головных болей. И во всем виновата WP. Аррргх!
Хороший, и я использовал его в этом ответе, немного изменив, может быть, вы сможете сделать его лучше, если я что-то пропустил, спасибо.
Что мне на самом деле было нужно, так это wp_nav_menu, но мне нужно было изменить параметр ‘container_class’, чтобы он работал для моего конкретного случая использования, где я при некоторых условиях заменил главное меню на другое, но мне нужно было, чтобы классы были совместимы с css.
Хороший! Я использовал решение для навигации от @toscho, но оно намного чище и проще в обслуживании. Это должен быть принятый ответ, гораздо лучшая практика.
Что ж, это простое и легкое решение, но зачем его использовать
span
, если вы все равно заблокируете его? xhtml/html4 не позволяет блокировать элементы внутри ссылок, однако html5 позволяет, поэтому просто используйтеdiv
, и нет необходимости в каком-либо css!Начиная с WordPress 3.0, вам больше не нужен настраиваемый ходок!
Есть
walker_nav_menu_start_el
фильтр, см. https://developer.wordpress.org/reference/hooks/walker_nav_menu_start_el/Пример:
Это не лучше и не хуже других предложений; это просто другое. Тоже коротко и мило.
Вместо того, чтобы использовать поле описания, как предлагает @toscho, вы можете заполнить поле «Название» в каждом пункте меню нужным текстом, а затем использовать этот CSS:
.menu-item a:after { content: attr(title); }
Также было бы легко использовать jQuery, чтобы добавить его, но текст достаточно декоративный, поэтому CSS кажется уместным.
Вы также можете написать
<span>
элемент после метки навигации в меню и использовать следующее правило CSS, чтобы изменить егоdisplay
настройку (inline
по умолчанию):