Jika Anda melihat implementasi WP_Nav_Menu_Widget
kelas Anda akan melihat kode berikut:
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'];
}
Ini berarti bahwa tidak ada peluang untuk menghubungkan menu. Jadi, Anda perlu melihat wp_nav_menu
implementasi fungsi, di mana Anda dapat menemukan baris kode berikut:
$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;
Di sini Anda dapat melihat bahwa semua argumen yang diteruskan ke wp_nav_menu
fungsi dapat diganti. Jadi yang Anda butuhkan adalah membuat hook handler Anda sendiri yang akan menambahkan walker Anda ke menu navigasi. Ini bisa sederhana seperti:
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()
argumen dari menu spesifik saya untuk menimpanya lagi menjadi walker default wordpress hanya untuk satu menu, tetapi sayangnya ini tidak berhasil.Memperluas jawaban @ Eugene, jika Anda ingin membatasi ini pada menu tertentu, cukup periksa ID istilah menu:
sumber
Ini adalah alternatif untuk menargetkan menu
term_id
dan saya pikir ini mungkin berguna bagi seseorang sebagai cara memodifikasi beberapa menu tanpa harus mencari id mereka.Dengan menambahkan
print_r($args)
ke filter, saya perhatikan bahwa itu$args['menu']
adalah string untuk menu di lokasi tema yang telah ditentukan danWP_Term_Object
untuk widget menu khusus di bilah sisi.Saya menggunakan ini untuk menargetkan menu dengan siput dan menambahkan kelas ke wadah mereka. Sejumlah menu dapat ditargetkan dengan memasukkan string umum ke siput mereka. Catatan: menu slug berasal dari kunci array di
register_nav_menus()
.Untuk satu menu, Anda hanya perlu memeriksa
$args['menu']->{slug} == 'your-slug'
bukan strpos () bit di atas.sumber
Anda dapat menambahkan custom walker ke menu nav yang dibuat di widget menggunakan
widget_nav_menu_args
filter yang ditambahkan di wordpress4.2.0
. Ia menerima empat argumen (lihatwp-includes/widgets/class-wp-nav-menu-widget.php
). Tetapi untuk menambahkan walker khusus, Anda hanya perlu menggunakan argumen pertama, seperti halnya Anda menggunakanwp_nav_menu_args
filter.sumber