您可以使用一点正则表达式和一个自定义菜单遍历器来实现这一点,尽管我尚未对此进行彻底测试:
class My_Walker_Nav_Menu extends Walker_Nav_Menu {
function start_lvl(&$output, $depth) {
$indent = str_repeat("\\t", $depth);
$output = preg_replace( "/(.*)(\\<li.*?class\\=\\")([^\\"]*)(\\".*?)$/", "$1$2$3 has-submenu$4", $output );
$output .= "\\n$indent<ul class=\\"sub-menu\\">\\n";
}
}
每次我们在菜单中开始一个新的级别时,我们都会看到最后一个打开
<li>
并将“has submenu”添加到class属性中。不幸的是,在生成列表项时,我们不知道它是否有子项。
要使用上述方法,只需传入walker参数,在其中声明菜单,例如:
wp_nav_menu( array( \'theme_location\' => \'header\', \'walker\' => new My_Walker_Nav_Menu() ) );