I'm currently trying to add an empty <span>
after every item title in my navigation which has childs. So only dropdown elements. Sadly also some of my non-dropdown items getting a <span>
inserted after the title. This is so strange. What I'm doing wrong?
add_filter( 'nav_menu_item_args', 'nav_menu_modify_dropdown', 10, 3 );
function nav_menu_add_dropdown( $args, $item, $depth ) {
error_log( print_r( $item, true ) );
if ( $args->theme_location === 'primary-menu' && in_array( 'menu-item-has-children', $item->classes, true ) ) {
$args->link_after = '<span></span>';
}
return $args;
}
I'm currently trying to add an empty <span>
after every item title in my navigation which has childs. So only dropdown elements. Sadly also some of my non-dropdown items getting a <span>
inserted after the title. This is so strange. What I'm doing wrong?
add_filter( 'nav_menu_item_args', 'nav_menu_modify_dropdown', 10, 3 );
function nav_menu_add_dropdown( $args, $item, $depth ) {
error_log( print_r( $item, true ) );
if ( $args->theme_location === 'primary-menu' && in_array( 'menu-item-has-children', $item->classes, true ) ) {
$args->link_after = '<span></span>';
}
return $args;
}
Share
Improve this question
asked Mar 29, 2019 at 14:35
Johnny97Johnny97
2147 silver badges18 bronze badges
1 Answer
Reset to default 0There is a mismatch of callback function names in your code. I believe, it's just a typo.
To understand the nature of your problem, we have to know, how walker-nav-menu
uses its parameters, while traversing a menu tree. $args
apply to entire menu tree. $item
is an individual menu item.
Any changes to arguments in $args
object, made via filters, are persistent for every next iteration of walker-nav-menu
. Your code should be:
add_filter( 'nav_menu_item_args', 'nav_menu_modify_dropdown', 10, 2 );
function nav_menu_modify_dropdown( $args, $item ) {
unset( $args->link_after );
if ( $args->theme_location === 'primary-menu' && in_array( 'menu-item-has-children', $item->classes, true ) )
$args->link_after = '<span></span>';
return $args;
}
If there is only one menu location, you can simplify your conditional statement:
if ( in_array( 'menu-item-has-children', $item->classes, true ) )
$args->link_after = '<span></span>';
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745644936a4637912.html
评论列表(0条)