如何在wp_nav_menu的含子菜单菜单项中添加<i>标签
解决方案:给WordPress带子菜单的菜单项添加下拉箭头标签
要实现给包含子菜单的菜单项添加指定的<i>下拉箭头标签,结合你已经实现的aria-haspopup属性代码,这里有两种实用方案供你选择:
方案1:用nav_menu_item_title过滤器快速追加箭头
这个方法简洁直接,适合不需要复杂结构调整的场景:
// 保留你已有的添加aria属性的代码 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)) { $atts['aria-haspopup'] = 'true'; } return $atts; } // 新增:给带自菜单的菜单项添加下拉箭头 add_filter( 'nav_menu_item_title', 'add_submenu_arrow_to_menu_item', 10, 4 ); function add_submenu_arrow_to_menu_item( $title, $item, $args, $depth ) { // 仅给顶级带自菜单的菜单项加箭头(如果需要给所有层级子菜单也加,去掉$depth === 0的判断) if (in_array('menu-item-has-children', $item->classes) && $depth === 0) { $title .= '<i class="hover-ind fa fa-angle-down" aria-hidden="true"></i>'; } return $title; }
方案2:自定义Walker_Nav_Menu类(更灵活的结构控制)
如果需要对菜单HTML结构做更多自定义,自定义Walker类能完全掌控输出逻辑:
// 自定义菜单Walker类 class Custom_Nav_Walker extends Walker_Nav_Menu { // 处理菜单项的链接输出 function start_el( &$output, $item, $depth = 0, $args = null, $id = 0 ) { $classes = empty( $item->classes ) ? array() : (array) $item->classes; $has_children = in_array('menu-item-has-children', $classes); // 先调用父类方法生成基础链接结构 parent::start_el( $output, $item, $depth, $args, $id ); // 给带自菜单的菜单项插入箭头标签 if ($has_children) { $output = str_replace('</a>', '<i class="hover-ind fa fa-angle-down" aria-hidden="true"></i></a>', $output); } } } // 调用菜单时指定使用自定义Walker(示例) // wp_nav_menu( array( // 'theme_location' => 'primary', // 'walker' => new Custom_Nav_Walker() // ) );
使用这个方案时,记得在主题中调用wp_nav_menu的地方,加上walker参数指定自定义类实例。
两种方案都能实现你要的效果,简单需求选方案1,需要更多结构调整选方案2就好。
内容的提问来源于stack exchange,提问作者Rango
相关产品推荐
相关产品推荐

