问题描述
我是 Twitter Bootstrap,需要将 data-toggle = “modal” 属性添加到菜单链接的标签。在搜索大多数所有结果时,请参考为 Twitter Bootstrap 下拉菜单进行步骤,但是该菜单没有下拉列表,我只需要添加特定的属性。
接下来我发现这个:Add custom attributes to menu items without plugin 这是非常有用的,因为它出现在 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 等目标一个菜单项。
有没有人知道在哪里找到一个定位菜单项的例子,或者可以确定如何基于上述链接的 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;
}
}
但是添加 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'] )
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。