有一些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()
功能可能很方便。
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;
}