Как в стандартном Walker в Wordpress заменить sub menu на другой класс в более глубоких уровнях вложениях
Есть необходимость второго class'a подменю. То есть на 3-4 и более глубоких уровнях class sub-menu заменить на другой типо sub-sub-menu.
Ответы (1 шт):
Автор решения: Darth KYL
→ Ссылка
для этого не обязательно использовать walker вы можете сделать это через фильтр nav_menu_submenu_css_class. Если нужно проставить класс глубины вложения для определенного меню вы можете использовать проверку на локацию меню используя параметры из переменной $args
add_filter( 'nav_menu_submenu_css_class', 'change_sub_menu_class_list', 10, 3 );
function change_sub_menu_class_list( $classes, $args, $deps ) {
if ( $args->menu_location == 'menu-1' ) {
$classes[] = "menu-depth-{$deps}";
}
$classes[] = "menu-depth-{$deps}";
return $classes;
}
либо если вы используете walker вам нужно переопределить метод start_lvl
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 );
$classes = [ 'sub-menu' ];
$classes[] = "menu-depth-{$depth}";
$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}";
}