web-dev-qa-db-fra.com

Pourquoi l'argument $ item du filtre 'nav_menu_item_args' est-il vide?

J'essaie de me connecter à 'nav_menu_item_args' filter dans la méthode start_el() à 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 );

Voici mon 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' );

Mais je rencontre un problème lorsque j'essaie d'utiliser l'argument $item. C'est vide. Et je suis très sûr d'appeler un menu. Le tableau $args contient toutes les bonnes valeurs.

Alors, est-ce un bug? Ou est-ce que je fais quelque chose de mal?

2
Peter Westerlund

Les filtres (et les actions) doivent être déclarés avec le nombre d'arguments acceptés par le rappel. c'est le quatrième paramètre de add_filter() (1 par défaut):

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;

}

Voir add_filter() pour référence .

3
cybmeta