问题
This is how I override ul, li classes (BEM notation) in primary navigation in Wordpress. This support nested menu elements. Steps: 1. Create menu 2. make sure that you disabled echo in wp_nav_menu by "'echo' => false" 3. put echo before first preg_replace My Menu doesn't have additional wrapper
function storefront_primary_navigation() {
?>
<nav class="menu" role="navigation" aria-label="<?php esc_html_e( 'Primary Navigation', 'storefront' ); ?>">
<button class="menu__btn" aria-controls="menu" aria-expanded="false"><span><?php echo esc_attr( apply_filters( 'storefront_menu_toggle_text', __( 'Menu', 'storefront' ) ) ); ?></span></button>
<?php
echo preg_replace('#class="(.+\s)?sub-menu(\s|")#', 'class="menu__list--subMenu"',
preg_replace('#<li[^>]+>#','<li class="menu__item">',
preg_replace('#<a#','<a class="menu__link"',
wp_nav_menu(
array(
'items_wrap' => '<ul class="menu__list">%3$s</ul>',
'theme_location' => 'primary',
'container' => false,
'echo' => false
)
)
)
)
);
wp_nav_menu(
array(
'theme_location' => 'handheld',
'container_class' => 'handheld-navigation',
)
);
?>
</nav><!-- menu -->
<?php
}
来源:https://stackoverflow.com/questions/59847953/wordpress-primary-navigation-ul-li-class-override