Se você observar a implementação da WP_Nav_Menu_Widget
classe, verá o seguinte código:
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'];
}
Isso significa que não há chance de conectar um menu. Então, você precisa dar uma olhada na wp_nav_menu
implementação da função, onde você pode encontrar as seguintes linhas de código:
$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;
Aqui você pode ver que todos os argumentos passados para a wp_nav_menu
função podem ser substituídos. Então, o que você precisa é criar seu próprio manipulador de gancho, que adicionará seu andador a um menu de navegação. Pode ser simples como:
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()
nos argumentos do meu menu específico substituí-lo novamente para se tornar o caminhante padrão do wordpress para apenas um menu, mas, infelizmente, isso não funciona.Expandindo a resposta de @ Eugene, se você quiser limitar isso a um menu específico, basta verificar o termo ID do menu:
fonte
Essa é uma alternativa ao direcionamento de um menu
term_id
e achei que poderia ser útil a alguém como uma maneira de modificar vários menus sem precisar procurar seus IDs.Ao adicionar
print_r($args)
a um filtro, notei que$args['menu']
é uma sequência de caracteres para menus em locais de tema predefinidos eWP_Term_Object
para um widget de menu personalizado em uma barra lateral.Eu usei isso para direcionar menus por lesma e adicionar uma classe ao seu contêiner. Vários menus podem ser segmentados incluindo uma sequência comum em suas lesmas. Nota: o slug do menu vem da chave do array
register_nav_menus()
.Para um único menu, você só precisa verificar isso em
$args['menu']->{slug} == 'your-slug'
vez do bit strpos () acima.fonte
Você pode adicionar um andador personalizado a um menu de navegação criado em um widget usando o
widget_nav_menu_args
filtro adicionado no wordpress4.2.0
. Ele aceita quatro argumentos (consultewp-includes/widgets/class-wp-nav-menu-widget.php
). Mas, para adicionar apenas um andador personalizado, você só precisa usar o primeiro argumento, da mesma maneira que usa owp_nav_menu_args
filtro.fonte