So fordern Sie container_class von wp_nav_menu an

Ich versuche derzeit, einen benutzerdefinierten Nav Walker einzurichten, der container_class aus dem Menü als Präfix für die classnnamen der Listenelemente und untergeordneten Elemente verwendet.

$defaults = array( 'menu' => '', 'menu_class' => '', 'menu_id' => '', 'container' => 'nav', 'container_class' => 'nav-primary', 'container_id' => '', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'depth' => 0, 'walker' => new Custom_Nav_Walker(), 'theme_location' => 'primary', 'items_wrap' => '
    %3$s
', ); wp_nav_menu( $defaults );

Die allgemeine Idee ist, dass der Walker die classn nach dem Namen der Containerklasse ausgibt. Wie so.

  

Hoffentlich kann jemand helfen.

Solutions Collecting From Web of "So fordern Sie container_class von wp_nav_menu an"

Gehen Sie mit einem benutzerdefinierten Walker

 class Your_Walker_Nav_Menu extends Walker_Nav_Menu { var $container_class; public function __construct($container_class) { $this->container_class = $container_class; } function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { global $wp_query; $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent // Depth-dependent classes. $depth_classes = array( ( $depth == 0 ? 'main-menu-item' : 'sub-menu-item' ), ( $depth >=2 ? 'sub-sub-menu-item' : '' ), ( $depth % 2 ? 'menu-item-odd' : 'menu-item-even' ), 'menu-item-depth-' . $depth ); $depth_class_names = esc_attr( implode( ' ', $depth_classes ) ); // Passed classes. $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = esc_attr( implode( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ) ); // Build HTML. $output .= $indent . ' 

Beachten Sie die Konstrukt-function, wenn Sie das Menü aufrufen:

 'container_class' => 'nav-primary', 'walker' => new Your_Walker_Nav_Menu('nav-primary') 

Bisher habe ich versucht, den Wert aus der Nav-Vorlage zu ziehen.

https://github.com/WordPress/WordPress/blob/master/wp-includes/nav-menu-template.php .

Ich weiß, dass es damit zusammenhängt
$class = $args->container_class ? ' class="' . esc_attr( $args->container_class ) . '"' : ' class="menu-'. $menu->slug .'-container"'; on line 353.

Der Wert gibt null zurück, wenn er angefordert wird. Die Idee besteht darin, den Wert als Teil des classnnamens zu loopen. Da ich nur den Namen selbst zurückgeben muss.

 'primary-menu__item' 

würde werden

 $container_class . '-menu__item