Я Twitter Bootstrap и мне нужно добавить атрибут data-toggle = "modal" в тег ссылки меню. При поиске почти по всем ссылкам на результаты выполняя обход выпадающих меню Twitter Bootstrap, однако в этом меню нет выпадающих меню, и мне нужно только добавить определенный атрибут.
Затем я обнаружил, что: добавлять пользовательские атрибуты в пункты меню без плагина, что очень полезно, так как в 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;
}
и это работает, однако, как и ожидалось, добавляет атрибут ко всем тегам a в меню. Поэтому я пытаюсь выяснить, как настроить таргетинг на один элемент меню с помощью # 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);
ОБНОВЛЕНИЕ. Единственный приведенный ниже ответ звучит так, как будто он относится к чему-то, но по нему не удалось определить, как на самом деле найти число, на которое будет нацелена моя конкретная ссылка, и где / как добавить это условие в рабочем примере. Добавил комментарий, но не получил ответ. Так как прошло около 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;
}
}
Однако, добавив, что если заявление, предложенное одним комментатором, я получаю следующую ошибку:
Fatal error: Cannot use object of type WP_Post as array
Я предполагаю, что больше кода требуется, но в потере. В качестве напоминания без оператора if он работает, однако он нацелен на все ссылки, а не на одну ссылку, на которую я хочу ориентироваться.
Ответы:
Конкретно редактируя код, который вы указали в исходном вопросе:
источник
array_key_exists()
Второй
$item
аргумент, который становится доступным для вашей функции фильтра, содержит объект пункта меню. В случае сброса это выглядит примерно так:Для нацеливания на конкретный пункт меню необходимо сформулировать свое условие и сравнить его с данными, доступными в объекте, например
if ( 2220 == $item['ID'] )
источник
$item
это объект, а не массив; изменить$item['ID']
To$item->ID
.Почему вы не подходите к этой проблеме с другой стороны? Вместо того, чтобы пытаться выбрать пункт меню с идентификатором == ?? который может измениться в какой-то момент (пункт меню, а не идентификатор), используйте область WP Admin, чтобы добавить пользовательский класс в пункт меню, на который вы хотите настроить таргетинг. Затем используйте этот класс в своем Javascript, чтобы вызвать необходимую информацию:
Мой JavaScript не гарантируется. Если вы не используете JQuery, вы можете попробовать это .
источник
Я хотел добавить буквы данных в пользовательское меню, которое я создал в WordPress.
Шаги, которые я выбрал, были:
Вот мой код.
Надеюсь, это поможет вам.
источник