Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage Conditionnel Menus - Walkers WordPress

Des sous-menus visibles selon la page courante

    6 décembre 2017 à 1:17:17

    Bonjour,

    j'ai besoin de faire apparaître certaines parties du menu principal d'un site (des sous-menus donc) selon la page que nous consultons. J'utilise pour ça les Walkers de WordPress (depuis le fichier functions.php).

    Actuellement, avec le code suivant, chaque sous-menu s'affiche si nous nous trouvons sur l'une des pages présentes dans ce sous-menu, ou sur sa page principale.

    /**
     * N'afficher que les sous-menus de la section courante
     */
    add_filter( 'wp_nav_menu_objects', 'only_submenu_for_current', 10, 2 );
    function only_submenu_for_current( $sorted_menu_items, $args ) {
        $parent_to_leave = array( 0 );
        foreach ( $sorted_menu_items as $item ) {
            $id_el = 0 != $item->menu_item_parent ? $item->menu_item_parent : $item->ID;
            if ( ! in_array( $id_el, $parent_to_leave )
              && count( array_intersect( $item->classes, array(
                   'current-menu-item',
                   'current-menu-parent',
                   'current-menu-ancestor' ) ) ) > 0 ) {
                $parent_to_leave[] = $id_el;
            }
        }
        // 2nd passe
        foreach ( $sorted_menu_items as $key => $item ) {
            if ( ! in_array( $item->menu_item_parent, $parent_to_leave ) ) {
                unset( $sorted_menu_items[ $key ] );
            } elseif ( 0 == $item->menu_item_parent
                    && ! in_array( $item->ID, $parent_to_leave ) ) {
                if ( $class_key = array_search( 'menu-item-has-children', $sorted_menu_items[ $key ]->classes ) ) {
                    unset( $sorted_menu_items[ $key ]->classes[ $class_key ] );
                }
            }
        }
        return $sorted_menu_items;
    }

    C'est un bon début. Mais, les pages présentes dans chaque sous-menu possèdent aussi des sous-pages, qui elles ne sont pas présentes dans ces sous-menus. Je souhaite afficher le sous-menu correspondant sur ces sous-pages même si elles n'y sont pas présentes.

    Pour mieux visualiser la chose, imaginons les pages suivantes classées dans cet ordre :

    • 1. Onglet A
    •       2. sous-onglet A
    •           3. sous-page A
    •           3. sous-page B
    •           3. sous-page C
    •       2. sous-onglet B
    •           3. sous-page A
    •           3. sous-page B
    •           3. sous-page C
    • 1. Onglet B
    •       2. sous-onglet A
    •           3. sous-page A
    •           3. sous-page B
    •           3. sous-page C
    •       2. sous-onglet B
    •           3. sous-page A
    •           3. sous-page B
    •           3. sous-page C

    - (1) Le premier niveau correspond au menu principal du site (permanent) ; 
    - (2) Le deuxième, aux sous-menus ; 
    - (3) Le troisième niveau correspond aux sous-pages des niveaux supérieurs mais ne figurant pas dans les menus.

    Je souhaite que le sous-menu (niv. 2) orange s'affiche lorsque l'on consulte n'importe quelle page orange. Idem pour vert, etc.

    Merci pour votre aide ; j'ai essayé pas mal de choses avec ces Walkers, mais je ne connais pas assez bien leur fonctionnement.

    -
    Edité par Insigni 8 décembre 2017 à 17:05:08

    • Partager sur Facebook
    • Partager sur Twitter
    Insigni.fr - Création de sites web WordPress & SEO à Lille

    Affichage Conditionnel Menus - Walkers WordPress

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown