Intereting Posts

Задайте пользовательский идентификатор для выбора пользовательской функции 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".

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

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

Вы можете использовать фильтр 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 );