web-dev-qa-db-fra.com

Wordpress nav_menu_css_class filtre de thème n'est pas appelé

J'ai des problèmes pour faire fonctionner un filtre. J'essaie d'ajouter une classe à chaque élément <li> d'un menu. C'est sur le fichier functions.php de mon thème:

/**
 * Adds custom classes to the items in the nav menu
 *
 * @param array $classes Classes for the body element.
 * @return array
 */
function nav_menu_item_classes( $classes, $item, $args, $depth ) {

    // This is what I used to check that it's not working
    error_log("is nav_menu_item_classes working?");

    if ( 'menu-1' === $args->theme_location ) {
        // Add the Bootstrap nav-item class
        $classes[] = 'nav-item';
    }

  return $classes;

}

add_filter( 'nav_menu_css_class', 'nav_menu_item_classes', 10, 4 );

Voici comment j'appelle le menu de mon fichier header.php:

<?php
    wp_nav_menu( array(
        'theme_location' => 'menu-1',
        'menu_id'        => 'primary-menu',
        'menu_class'     => 'navbar-nav',
    ) );
?>

Tout semble correspondre, mais le filtre n'est pas exécuté. Quel pourrait être le problème?

1
José María

Le filtre nav_menu_css_class est situé dans la fonction start_el de la classe de marcheur de WP. Comme vous pouvez le voir dans le source, il n'y a pas d'exécution conditionnelle ici, donc une fois que le marcheur est appelé, le filtre doit être appliqué.

Cela nous amène à wp_nav_menu , qui appelle le marcheur (par le biais d’appels intermédiaires) sur la ligne où il est écrit: $items .= walk_nav_menu_tree( $sorted_menu_items, $args->depth, $args );. Donc, si quelque chose empêche le filtre d'être appelé, cela doit se produire avant cette ligne. En réalité, il y a trois possibilités:

  1. Vous voyez d’abord un filtre appelé wp_nav_menu_args . Si cela est utilisé, il se peut que vous ajoutiez un programme personnalisé qui n'appelle pas le filtre.

  2. Deuxièmement, il y a le filtre pre_wp_nav_menu . Si cela est utilisé, le reste de la fonction est court-circuité et n'atteint jamais le marcheur.

  3. Enfin, s’il n’ya pas d’éléments dans votre menu et qu’aucun repli n’est défini, le marcheur sera également ignoré. S'il y a un repli (éventuellement ajouté avec wp_nav_menu_args), cela produira la sortie au lieu du marcheur.

0
cjbj