我正在使用这个简单的函数向菜单中添加一个下拉指示器。然而,我在<li>
那有等级menu-item-has-children
. 如何更改此选项,使其仅显示父菜单项上的指示器?
add_filter( \'nav_menu_link_attributes\', \'wpse154485_add_aria_haspopup_atts\', 10, 3 );
function wpse154485_add_aria_haspopup_atts( $atts, $item, $args ) {
if (in_array(\'menu-item-has-children\', $item->classes)) {
$args->link_after = "</span><span class=\'caret\'><i class=\'dropdown-indicator\'></i></span>";
}
return $atts;
}
Edit: 根据要求,这里有一个菜单项的vardump,我确实不想显示下拉指示器(但当前正在显示)。
object(WP_Post)#1695 (47) {
["ID"]=>
int(9775)
["post_author"]=>
string(1) "1"
["post_date"]=>
string(19) "2017-01-11 00:23:04"
["post_date_gmt"]=>
string(19) "2017-01-11 05:23:04"
["post_content"]=>
string(0) ""
["post_title"]=>
string(18) "Blog"
["post_excerpt"]=>
string(0) ""
["post_status"]=>
string(7) "publish"
["comment_status"]=>
string(6) "closed"
["ping_status"]=>
string(6) "closed"
["post_password"]=>
string(0) ""
["post_name"]=>
string(16) "blog"
["to_ping"]=>
string(0) ""
["pinged"]=>
string(0) ""
["post_modified"]=>
string(19) "2017-01-25 10:38:11"
["post_modified_gmt"]=>
string(19) "2017-01-25 15:38:11"
["post_content_filtered"]=>
string(0) ""
["post_parent"]=>
int(0)
["guid"]=>
string(29) "http://localhost:8888/?p=9775"
["menu_order"]=>
int(5)
["post_type"]=>
string(13) "nav_menu_item"
["post_mime_type"]=>
string(0) ""
["comment_count"]=>
string(1) "0"
["filter"]=>
string(3) "raw"
["db_id"]=>
int(9775)
["menu_item_parent"]=>
string(4) "9779"
["object_id"]=>
string(4) "9772"
["object"]=>
string(4) "page"
["type"]=>
string(9) "post_type"
["type_label"]=>
string(4) "Page"
["url"]=>
string(34) "http://localhost:8888/blog/"
["title"]=>
string(18) "Blog"
["target"]=>
string(0) ""
["attr_title"]=>
string(0) ""
["description"]=>
string(0) ""
["classes"]=>
array(4) {
[0]=>
string(0) ""
[1]=>
string(9) "menu-item"
[2]=>
string(24) "menu-item-type-post_type"
[3]=>
string(21) "menu-item-object-page"
}
["xfn"]=>
string(0) ""
["extended_activate"]=>
string(0) ""
["highlight_menu"]=>
string(0) ""
["extended_columns"]=>
string(0) ""
["extended_heading"]=>
string(0) ""
["extended_disable_link"]=>
string(0) ""
["extended_text_chk"]=>
string(0) ""
["extended_free_text"]=>
string(0) ""
["current"]=>
bool(false)
["current_item_ancestor"]=>
bool(false)
["current_item_parent"]=>
bool(false)
}
在这种情况下,Blog菜单项是一个子菜单项&;没有“menu item has children”类。但是,它的父项确实包含它。
最合适的回答,由SO网友:David Lee 整理而成
这个$args
参数是整个菜单的参数,而不是单个菜单项的参数,您可以看到它here 在使用和执行过滤器的文件本身中:
@param stdClass$args wp\\u nav\\u menu()参数的对象。
所以当你的IF
如果为true(该项是父项),则您正在修改整个菜单参数:
$args->link_after = "</span><span class=\'caret\'><i class=\'dropdown-indicator\'></i></span>";
因此,父项之后的所有菜单项都将具有下拉指示器。
如果要添加下拉指示器,必须执行经典操作custom walker
这样,您就可以创建自己的类:
class Custom_Nav_Walker extends Walker_Nav_Menu{}
并覆盖
start_el
函数,您将找到有关它的大量信息。