I’m trying to hook into 'nav_menu_item_args' filter in method start_el() in class Walker_nav_menu:

/**
* Filters the arguments for a single nav menu item.
*
* @since 4.4.0
*
* @param stdClass $args  An object of wp_nav_menu() arguments.
* @param WP_Post  $item  Menu item data object.
* @param int      $depth Depth of menu item. Used for padding.
*/
$args = apply_filters( 'nav_menu_item_args', $args, $item, $depth );

Here is my code:

function filter_nav_menu_item_args($args, $item, $depth)
{
        if ($args->menu->slug == 'countries')
        {
            $args->link_before = print_r($item, true); // <-- Outputs nothing
        }

    return $args;
}
add_filter('nav_menu_item_args', 'filter_nav_menu_item_args' );

But I get problem when trying to use the $item argument. It’s empty. And I’m very sure I’m calling a menu. The $args array contains all the right values.

So, is this a bug? Or am I doing something wrong?

1 Answer
1

Filters (and actions) need to be declared with the number of arguments accepted by the callback; it is the fourth parameter of add_filter() (default 1):

add_filter( 'nav_menu_item_args', 'filter_nav_menu_item_args', 10, 3 );
function filter_nav_menu_item_args( $args, $item, $depth ) {

    print_r( $item );

    return $args;

}

See add_filter() for reference.

Leave a Reply

Your email address will not be published. Required fields are marked *