检查wp_nav_菜单项是否有子菜单

时间:2014-07-14 作者:Staffan Estberg

我希望通过wp\\u nav\\u menu为菜单输出以下标记,

<ul>
        <li><a href="/">Home</a></li>
        <li>
            <a href="/" aria-haspopup="true">Blog</a>
            <ul>
                <li><a href="/">Design</a></li>
                <li><a href="/">HTML</a></li>
                <li><a href="/">CSS</a></li>
                <li><a href="/">JavaScript</a></li>
            </ul>
        </li>
</ul>
菜单项可能有子菜单-如果是这种情况,顶层链接需要按照上面的示例进行格式化。我尝试了不同的解决方案,但没有成功。似乎我需要为此创建一个walker,除非我想添加一组查询(在主循环中运行子菜单循环)。但是,由于这是一个很小的更改,难道不可能在菜单输出上添加一个过滤器挂钩吗?

1 个回复
最合适的回答,由SO网友:nothingtosee 整理而成

如果我理解正确,您希望与子菜单的链接具有属性aria-haspopup. 如果这是正确的,您应该能够使用nav_menu_link_attributes 过滤器(WP 3.6及以上)。您还可以通过在过滤器中检查项目的css类来避免编写自定义Walker来检查项目是否有子项的必要性。

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;
}

结束

相关推荐

Walker导航从某一深度移除子菜单UL

我想删除sub-menu ul和.menu-item-has-children 当菜单深度优于或等于2时初始化。所以,我只想要一个最多有3个子菜单的菜单。其他子项仍将显示在菜单中,但不会显示在子菜单中。使用wp\\U nav\\U菜单(“深度”=>3),它不会附加所有项目。所以,我想我需要使用一个定制的walker导航。我不知道该怎么做start_lvl. 如何计算深度并删除ul和类。。。我的目标是更改此菜单:菜单项具有子菜单项1菜单项2菜单项具有子菜单项3菜单项4菜单项具有子菜单项5菜单项6:菜单