选项的选择。
- 将“echo”参数切换为 false,您可以替换类名。
echo str_replace('sub-menu', 'menu menu_sub', wp_nav_menu( array(
'echo' => false,
'theme_location' => 'sidebar-menu',
'items_wrap' => '<ul class="menu menu_sidebar">%3$s</ul>'
) )
);
- 从 WP 4.8 开始,我们可以使用 nav_menu_submenu_css_class 过滤器。
add_filter( 'nav_menu_submenu_css_class', 'my_custom_submenu_classnames', 10, 3 );
/**
* Filters the CSS class(es) applied to a menu list element.
*
* @param string[] $classes Array of the CSS classes that are applied to the menu `<ul>` element.
* @param stdClass $args An object of `wp_nav_menu()` arguments.
* @param int $depth Depth of menu item. Used for padding.
* @return string[]
*/
function my_custom_submenu_classnames( $classes, $args, $depth ) {
// Here we can additionally use menu arguments.
if ( 'header-menu' === $args->theme_location ) {
$default_class_name_key = array_search( 'sub-menu', $classes );
if ( false !== $default_class_name_key ) {
unset( $classes[ $default_class_name_key ] );
}
$classes[] = 'header-submenu';
$classes[] = "depth-{$depth}";
}
return $classes;
}
- 自定义菜单漫游器:
class My_Nav_Menu_Walker extends Walker_Nav_Menu {
/**
* Starts the list before the elements are added.
*
* @see Walker::start_lvl()
*
* @param string $output Used to append additional content (passed by reference).
* @param int $depth Depth of menu item. Used for padding.
* @param stdClass $args An object of wp_nav_menu() arguments.
*/
public function start_lvl( &$output, $depth = 0, $args = null ) {
if ( isset( $args->item_spacing ) && 'discard' === $args->item_spacing ) {
$t = '';
$n = '';
} else {
$t = "\t";
$n = "\n";
}
$indent = str_repeat( $t, $depth );
// ! You default class names.
$classes = array( 'sub-menu', 'my-class' );
// ! Example of using arguments.
if ( 'header-menu' === $args->theme_location ) {
$default_class_name_key = array_search( 'sub-menu', $classes );
if ( false !== $default_class_name_key ) {
unset( $classes[ $default_class_name_key ] );
}
$classes[] = 'header-submenu';
$classes[] = "depth-{$depth}";
}
/**
* Filters the CSS class(es) applied to a menu list element.
*
* @since 4.8.0
*
* @param string[] $classes Array of the CSS classes that are applied to the menu `<ul>` element.
* @param stdClass $args An object of `wp_nav_menu()` arguments.
* @param int $depth Depth of menu item. Used for padding.
*/
$class_names = implode( ' ', apply_filters( 'nav_menu_submenu_css_class', $classes, $args, $depth ) );
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
$output .= "{$n}{$indent}<ul{$class_names}>{$n}";
}
}
仍然需要使用自定义 walker 包含文件并将其指向菜单:
wp_nav_menu(
array(
'theme_location' => 'header-menu',
'walker' => new My_Nav_Menu_Walker()
)
);