Si vous regardez l'implémentation de la WP_Nav_Menu_Widget
classe, vous verrez le code suivant:
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'];
}
Cela signifie qu'il n'y a aucune chance d'accrocher un menu. Vous devez donc jeter un œil à wp_nav_menu
l'implémentation de la fonction, où vous pouvez trouver les lignes de code suivantes:
$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;
Ici, vous pouvez voir que tous les arguments passés à la wp_nav_menu
fonction peuvent être remplacés. Donc, ce dont vous avez besoin est de créer votre propre gestionnaire de hook qui ajoutera votre déambulateur à un menu de navigation. Cela pourrait être simple:
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()
dans les arguments de mon menu spécifique de le remplacer à nouveau pour devenir le marcheur par défaut de wordpress pour un seul menu, mais malheureusement cela ne fonctionne pas.En développant la réponse de @ Eugene, si vous souhaitez limiter cela à un menu spécifique, vérifiez simplement le terme ID du menu:
la source
C'est une alternative au ciblage d'un menu par
term_id
et j'ai pensé que cela pourrait être utile à quelqu'un comme moyen de modifier plusieurs menus sans avoir à rechercher leurs identifiants.En ajoutant
print_r($args)
à un filtre, j'ai remarqué qu'il$args['menu']
s'agit d'une chaîne pour les menus dans des emplacements de thème prédéfinis etWP_Term_Object
pour un widget de menu personnalisé dans une barre latérale.Je l'ai utilisé pour cibler les menus par slug et ajouter une classe à leur conteneur. Un certain nombre de menus peuvent être ciblés en incluant une chaîne commune dans leurs slugs. Remarque: le slug de menu provient de la clé du tableau
register_nav_menus()
.Pour un seul menu, il vous suffit de vérifier cela
$args['menu']->{slug} == 'your-slug'
au lieu du bit strpos () ci-dessus.la source
Vous pouvez ajouter un déambulateur personnalisé à un menu de navigation créé dans un widget à l'aide du
widget_nav_menu_args
filtre ajouté dans wordpress4.2.0
. Il accepte quatre arguments (voirwp-includes/widgets/class-wp-nav-menu-widget.php
). Mais pour ajouter uniquement un marcheur personnalisé, il vous suffit d'utiliser le premier argument, de la même manière que vous utilisez lewp_nav_menu_args
filtre.la source