Wenn Sie sich die Implementierung der WP_Nav_Menu_Widget
Klasse ansehen, sehen Sie den folgenden Code:
function widget($args, $instance) {
// Get menu
$nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false;
if ( !$nav_menu )
return;
$instance['title'] = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base );
echo $args['before_widget'];
if ( !empty($instance['title']) )
echo $args['before_title'] . $instance['title'] . $args['after_title'];
wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu ) );
echo $args['after_widget'];
}
Dies bedeutet, dass es keine Möglichkeit gibt, ein Menü zu verknüpfen. Sie müssen sich also die wp_nav_menu
Funktionsimplementierung ansehen , in der Sie folgende Codezeilen finden:
$defaults = array(
'menu' => '',
'container' => 'div',
'container_class' => '',
'container_id' => '',
'menu_class' => 'menu',
'menu_id' => '',
'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' => 0,
'walker' => '',
'theme_location' => ''
);
$args = wp_parse_args( $args, $defaults );
$args = apply_filters( 'wp_nav_menu_args', $args );
$args = (object) $args;
Hier sehen Sie, dass alle an die wp_nav_menu
Funktion übergebenen Argumente ersetzt werden konnten. Sie müssen also Ihren eigenen Hook-Handler erstellen, der Ihren Walker zu einem Navigationsmenü hinzufügt. Es könnte einfach sein als:
function myplugin_custom_walker( $args ) {
return array_merge( $args, array(
'walker' => new My_Custom_Walker(),
// another setting go here ...
) );
}
add_filter( 'wp_nav_menu_args', 'myplugin_custom_walker' );
'walker' => new Walker_Nav_Menu()
in den Argumenten meines spezifischen Menüs versucht habe, es erneut zu überschreiben, um der WordPress-Standard-Walker für nur ein Menü zu werden, aber leider funktioniert dies nicht.Wenn Sie die Antwort von @ Eugene erweitern und dies auf ein bestimmtes Menü beschränken möchten, überprüfen Sie einfach die Term-ID des Menüs:
quelle
Dies ist eine Alternative zum Targeting eines Menüs von
term_id
und ich dachte, es könnte für jemanden von Nutzen sein, um mehrere Menüs zu ändern, ohne deren IDs nachschlagen zu müssen.Beim Hinzufügen
print_r($args)
zu einem Filter habe ich festgestellt, dass dies$args['menu']
eine Zeichenfolge für Menüs an vordefinierten Themenpositionen undWP_Term_Object
für ein benutzerdefiniertes Menü-Widget in einer Seitenleiste ist.Ich habe dies verwendet, um Menüs per Slug anzuvisieren und ihrem Container eine Klasse hinzuzufügen. Eine Reihe von Menüs kann als Ziel ausgewählt werden, indem eine gemeinsame Zeichenfolge in ihre Slugs eingefügt wird. Hinweis: Der Menü-Slug kommt von der Array-Eingabe
register_nav_menus()
.Für ein einzelnes Menü müssten Sie dies nur
$args['menu']->{slug} == 'your-slug'
anstelle des obigen strpos () - Bits überprüfen .quelle
Sie können einem in einem Widget erstellten Navigationsmenü mithilfe des
widget_nav_menu_args
in WordPress hinzugefügten Filters einen benutzerdefinierten Walker hinzufügen4.2.0
. Es akzeptiert vier Argumente (siehewp-includes/widgets/class-wp-nav-menu-widget.php
). Um jedoch nur einen benutzerdefinierten Walker hinzuzufügen, müssen Sie nur das erste Argument verwenden, genauso wie Sie denwp_nav_menu_args
Filter verwenden.quelle