Пример создания своего Walker для БЭМ-меню
<?php
class Rohs_Walker_Menu extends Walker_Nav_Menu {
/**
* Формирует вложенный <ul> без внутренного содержимого и без </li>.
*
* @param string $output
* @param int $depth
* @param array|object $args
*/
public function start_lvl( &$output, $depth = 0, $args = [] ) {
$prefix = $args->container_class;
$output .= "<ul class='{$prefix}__subMenu'>";
}
/**
* Формирует тег <li> со всем внутренним содержимым без </li>.
*
* @param string $output
* @param WP_Post $item
* @param int $depth
* @param array|object $args
* @param int $id
*/
public function start_el( &$output, $item, $depth = 0, $args = [], $id = 0 ) {
$prefix = $args->container_class;
$is_white = get_field( 'white_font', $item ) && is_front_page();
$li_class = "{$prefix}__item";
$li_class .= $this->has_children ? " {$prefix}__item--expanded" : '';
$output .= "<li class='{$li_class}'>";
$atts = [];
$atts['title'] = ! empty( $item->attr_title ) ? $item->attr_title : '';
$atts['target'] = ! empty( $item->target ) ? $item->target : '';
$atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
$atts['href'] = ! empty( $item->url ) ? $item->url : '';
$atts['class'] = ! empty( $atts['class'] ) ? $atts['class'] . " {$prefix}__link" : "{$prefix}__link";
$atts['class'] .= $this->has_children ? " {$prefix}__link--expanded" : '';
$atts['class'] .= $is_white ? " {$prefix}__link--white" : '';
$atts['class'] .= ! empty( $args->a_class ) ? ' ' . $args->a_class : '';
$attributes = '';
foreach ( $atts as $attr => $value ) {
if ( ! empty( $value ) ) {
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
$attributes .= ' ' . $attr . '="' . $value . '"';
}
}
$title = apply_filters( 'the_title', $item->title, $item->ID );
$output .= "<a {$attributes}>{$title}</a>";
}
}