Intereting Posts
Как создать эту постоянную ссылку: post_type / postname / custom_inner_page можно ли «объединить» категории в качестве элемента меню? «Обновление не может быть установлено, потому что мы не сможем скопировать некоторые файлы». Фильтрация сообщений по настраиваемому значению поля не работает Как подготовить изображения для изменения ширины макета? Как запустить функцию при публикации сообщений? Как удалить некоторые метаболические средства для СРТ? Как добавить изображение для модульного тестирования? Копирование живого сайта, использующего устаревшую версию WP для localhost Как защитить загрузки в многопользовательском режиме, если пользователь не вошел в систему? Как узнать, какой плагин отображается? Использование meta_query в WP_Query не работает для чисел правильно Как получить почтовую мета для пользовательских типов сообщений и таксономии Как преобразовать заголовок страницы в нижний регистр? Как использовать переходы страницы в начало баннера и заголовок страницы?

Задайте пользовательский идентификатор для выбора пользовательской функции walker элемента

Я создаю навигацию с бутстрапом в пользовательской теме WP. Мне удалось получить этот результат:

<li id="menu-item-27" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27">...</li> 

Однако я уже разработал свою навигацию, прежде чем преобразовать ее в WP-навигацию следующим образом:

 <li class="" id="nava"><a href="--><?php //echo get_option('home');?><!--/">Home</a></li> 

Я хочу заменить id = "menu-item-27" id = "nava".

Любая помощь высоко ценится!

Вы можете использовать фильтр nav_menu_item_id следующим образом:

 add_filter( 'nav_menu_item_id', function( $menu_id, $item, $args, $depth ) { if( 'menu-item-27' === $menu_id ) $menu_id = 'nava'; return $menu_id; }, 10, 4 ); 

но я это «неустойчиво» относительно идентификатора меню, если вы удаляете и повторно вставляете элементы меню. Вы также можете настроить таргетинг на определенное местоположение.

Общим методом, который мне нравится в его гибкости, является проверка определенных классов CSS, которые мы можем установить в пользовательском интерфейсе навигации в бэкэнд.

Вот пример, где мы проверяем класс set-id-nava . Если он установлен, мы переопределяем идентификатор CSS с помощью nava :

 add_filter( 'nav_menu_item_id', function( $menu_id, $item, $args, $depth ) { if( in_array( 'set-id-nava', (array) $item->classes ) ) $menu_id = 'nava'; return $menu_id; }, 10, 4 ); 

Мы могли бы также сделать это более динамично и проверить на set-id-??? ,

Мы могли бы даже добавить дополнительное поле ввода для установки идентификаторов CSS для каждого элемента меню. Но для этого потребуется больше работы.

Если вы не хотите, чтобы set-id-nava был классом CSS, вы можете удалить его, например, через фильтр nav_menu_css_class .

Спасибо @birgire Я отредактировал класс walker следующим образом:

 From: $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args ); To: $id = apply_filters( 'nav_menu_item_id', 'nava', $item, $args ); Для того, From: $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args ); To: $id = apply_filters( 'nav_menu_item_id', 'nava', $item, $args );