Как в WordPress добавить класс sub-menu вложенным элементам меню

Столкнулся с этой проблемой недавно, — купил шаблон сайта на ThemeForest (чтобы дешевле было купил не WordPress шаблон, а просто html тему). Встала задача переделать его под WP. В разметке шаблона в меню сайта вложенным UL контейнерам был присвоен класс sub-menu. Но почему-то, когда я зарегистрировал новую область меню, шаблон вывел меню без этого класса.


Поиск по буржуйским сайтам привел меня к решению расширить класс Walker_Nav_Menu, добавив нужный код. После этого все получилось, но как-то через задницу. В functions.php я добавил класс:

class My_Walker_Nav_Menu extends Walker_Nav_Menu {
  function start_lvl(&$output, $depth) {
    $indent = str_repeat("\t", $depth);
    $output .= "\n$indent<ul class=\"my-sub-menu\">\n";
  }
}

Все вроде-бы ясно, если бы не одно но. В файле wp-includes/nav-menu-template.php, собственно, был такой же код. Спрашивается, зачем его переопределять?

Ответ на мой вопрос оказался прост. Действительно, незачем. Просто, когда Вы рендерите меню, нужно в аргументах указать значение depth больше нуля:

$args = array(
  'theme_location'  => 'primary',
  'menu'            => '',
  'container'       => '',
  'container_class' => '',
  'container_id'    => '',
  'menu_class'      => 'grid_8',
  'menu_id'         => 'navigation',
  'echo'            => true,
  'fallback_cb'     => 'wp_page_menu',
  'before'          => '',
  'after'           => '',
  'link_before'     => '',
  'link_after'      => '',
  'items_wrap'      => '<ul id=%1$s class=%2$s>%3$s</ul>',
  'depth'           => 3
);

wp_nav_menu( $args );

Надеюсь, что статья Вам помогла.

Понравилась запись? Ставь лайк!
Loading more content...