WP_NAV_MENU:有没有办法修改得到子菜单的<a>的输出?

时间:2017-06-19 作者:deathlock

有一些preg_replace, 我可以替换wp_nav_menu, 所以我的一个菜单(有子菜单)现在看起来像这样。

<li class="nav-item nav-item-has-children dropdown menu-publication show">
    <a class="nav-link" href="#">Publication</a>
    <ul class="dropdown-menu">
        <li class="nav-item menu-book">
            <a class="nav-link" href="#">Book</a>
        </li>
    </ul>
</li>
但是,我还需要替换<a> 元素(该.nav-link) 因此<a> 如下所示:

<a class="nav-link" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" href="#">Publication</a>
问题是,我只想替换有子菜单的锚。我不想插手<a> 没有子菜单。我不知道该怎么做。有什么想法吗?

最好不要重做整个菜单漫游器。。。

我正在考虑这样做:

function change_submenu_link($submenulink) {    
    return preg_replace(\'/a class="nav-link"/\',\'class="nav-link" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"\',$submenulink);
}

add_filter(\'wp_nav_menu\',\'change_submenu_link\'); 
问题是我不知道如何确保它只替换<a> 有子菜单。如果有has_submenu() 功能可能很方便。

1 个回复
SO网友:Bassscape

您应该能够使用nav_menu_link_attributes 将属性添加到链接输出的步骤wp_nav_menu 具有子/子菜单链接的。

wp_nav_menu conditionally assigns classes 链接其输出。您需要以类的链接为目标。菜单项有子项

可以使用以下过滤器/函数添加所需的属性:

add_filter( \'nav_menu_link_attributes\', \'wpse270596_add_navlink_atts\', 10, 3 );
function wpse270596_add_navlink_atts( $atts, $item, $args ) {
  if (in_array(\'menu-item-has-children\', $item->classes)) {
    $atts[\'data-toggle\'] = \'dropdown\';
    $atts[\'aria-haspopup\'] = \'true\';
    $atts[\'aria-expanded\'] = \'true\';
  }
return $atts;
}

结束

相关推荐

Walker Class:在子菜单后立即输出父描述和特色图像?

我到处找遍了,但似乎找不到这个具体案例的答案。我试图在子菜单开始后立即输出页面的父描述和特征图像。我有以下代码可以工作,但会迭代每个链接,这很混乱。我至少能够修改深度,使其只输出一次内容,但我想a)清理它,b)找到真正正确的方法来执行此操作。这是我现在的步行者:class Description_Walker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args) {