Intereting Posts
Что такое _transient_random_seed? nginx или cherokee (+ php-fpm) для бэкэнд WordPress? Медленная meta_query с записью около 4 milion на wp_postmeta Как программно изменить тему из внешнего приложения? Как пользователь должен автоматически активироваться и идти для входа? Редактирование <? Php the_content («Подробнее …»); ?> Почему post_type игнорируется в этом запросе? Фильтр the_posts был вызван несколько раз Получить адрес электронной почты типа Администратор Добавление и удаление скрытых кнопок из редактора виджета WordPress Tinymce с использованием javascript API WP_Query-фильтр и порядок по мета-упорядочению по неверной объединенной таблице Пользовательский цикл, категория соответствия с страницей Как создать страницу, в которой перечислены теги по начальной букве? Я только что обновил свой SSL-сертификат, и теперь мой сайт теряет форматирование, когда Есть ли крючки, которые изменяют логику 404?

Как добавить атрибут данных в элемент меню WordPress

Я Twitter Bootstrap и вам нужно добавить атрибут data-toggle = "modal" в тег ссылки меню. При поиске большинства ссылок на результаты, сделанные в выпадающем меню Bootstrap для Twitter, однако в этом меню нет выпадающих меню, и мне нужно только добавить конкретный атрибут.

Затем я нашел это: добавьте пользовательские атрибуты в элементы меню без плагина, что очень полезно, поскольку оно появляется в WordPress 3.6+, нам больше не нужно делать сложные сложные ходунки, и вместо этого вы можете использовать это: http://codex.wordpress.org/Plugin_API / Filter_Reference / nav_menu_link_attributes

Однако, поскольку это работает, что ссылка на API довольно голая и не предлагает примеров, и поскольку она такая новая, в Google очень мало ссылок на нее.

Я попробовал это первым:

add_filter( 'nav_menu_link_attributes', 'mywp_contact_menu_atts', 10, 3 ); function pb_contact_menu_atts( $atts, $item, $args ) { // inspect $item, then … $atts['data-toggle'] = 'modal'; return $atts; } 

и это работает, однако, как и ожидалось, добавляет атрибут ко всем тегам в меню. Поэтому я пытаюсь выяснить, как настроить таргетинг на один пункт меню с помощью # menu-item-7857 a или такого.

Кто-нибудь знает, где найти пример таргетинга на элемент меню или определить, как использовать информацию, указанную в ссылке выше связанного API?

Чтобы отметить, я нашел следующий пример, но он предназначен только для объектов, у которых есть дети, которые не помогают, но могут быть в правильном направлении:

 add_filter('nav_menu_link_attributes', function($atts, $item, $args) { if ( $args->has_children ) { $atts['data-toggle'] = 'dropdown'; $atts['class'] = 'dropdown-toggle'; } return $atts; }, 10, 3); 

UPDATE. Единственный ответ ниже звучит так, как будто это что-то происходит, но от него не удалось определить, как на самом деле найти номер для моей конкретной ссылки и где / как добавить это условное выражение в рабочий пример. Добавил комментарий, но не услышал. Поскольку прошло около 18 дней, я подумал, поможет ли щедрость.

Когда я смотрю код для ссылки, на которую я хочу настроить таргетинг:

 <li id="menu-item-7858" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-7858"><a href="#" data-toggle="modal">Chat</a></li> 

Я вижу номер 7858, поэтому, возможно, это число, на которое я должен ориентироваться.

Но когда я пытаюсь например:

 add_filter( 'nav_menu_link_attributes', 'my_chat_menu_atts', 10, 3 ); function my_chat_menu_atts( $atts, $item, $args ) { if ( 7857 == $item['ID'] ) { // inspect $item, then … $atts['onclick'] = 'SnapEngage.startLink();'; return $atts; } } 

Однако добавив, что оператор if предложил один комментатор, я получил следующую ошибку:

Fatal error: Cannot use object of type WP_Post as array

Я предполагаю, что требуется больше кода, но утерян. В качестве напоминания без оператора if он работает, однако он нацелен на все ссылки, а не на одну ссылку, на которую я хочу настроить таргетинг.

В частности, редактирование кода, предоставленного вами в исходном вопросе:

 add_filter( 'nav_menu_link_attributes', 'wpse121123_contact_menu_atts', 10, 3 ); function wpse121123_contact_menu_atts( $atts, $item, $args ) { // The ID of the target menu item $menu_target = 123; // inspect $item if ($item->ID == $menu_target) { $atts['data-toggle'] = 'modal'; } return $atts; } 

Второй аргумент $item , который предоставляется вашей функции фильтра, содержит объект элемента меню. Если он сбрасывается, он выглядит примерно так:

 [1] => WP_Post Object ( [ID] => 2220 [post_author] => 1 [post_date] => 2012-12-26 19:29:44 [post_date_gmt] => 2012-12-26 17:29:44 [post_content] => [post_title] => Home [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => home-3 [to_ping] => [pinged] => [post_modified] => 2013-06-05 01:55:20 [post_modified_gmt] => 2013-06-04 22:55:20 [post_content_filtered] => [post_parent] => 0 [guid] => http://dev.rarst.net/?p=2220 [menu_order] => 1 [post_type] => nav_menu_item [post_mime_type] => [comment_count] => 0 [filter] => raw [db_id] => 2220 [menu_item_parent] => 0 [object_id] => 2220 [object] => custom [type] => custom [type_label] => Custom [title] => Home [url] => http://dev.rarst.net/ [target] => [attr_title] => [description] => [classes] => Array ( [0] => [1] => menu-item [2] => menu-item-type-custom [3] => menu-item-object-custom [4] => current-menu-item [5] => current_page_item [6] => menu-item-home ) [xfn] => [current] => 1 [current_item_ancestor] => [current_item_parent] => ) 

Чтобы настроить таргетинг на определенный пункт меню, вам нужно сформулировать свое условие и проверить его на наличие доступных данных в объекте, например if ( 2220 == $item['ID'] )

Почему бы вам не подойти к этой проблеме с другого направления? Вместо того, чтобы пытаться настроить таргетинг на пункт меню с id ==? который может измениться в какой-то момент (пункт меню, а не идентификатор), используйте область администратора WP, чтобы добавить пользовательский класс в пункт меню, для которого вы хотите настроить таргетинг. Затем используйте этот класс в своем Javascript, чтобы вызвать необходимую вам информацию:

 $('.my-class').click(function(e){ // do other stuff e.preventDefault; }); 

Мой javascript не гарантирован. Если вы не используете jQuery, вы можете попробовать это .