web-dev-qa-db-fra.com

Mettre en évidence les éléments de menu parent post ancêtre actuels

Les classes de menu par défaut dans WordPress sont très utiles. Mais un problème que je trébuche de temps en temps concerne les catégories en tant que sous-éléments des menus. Par exemple, la structure de menu suivante:

  • Page 1
  • Page 2
    • Catégorie 1
  • Page 3

Ainsi, lorsque Category 1 est actif, Page 2 obtient .current-menu-ancestor, ce qui est correct… mais dès qu'un message de Category 1 est affiché, Page 2 n'a pas de classe spécifique… Mais Category 1 a .current-menu-ancestor comme prévu.

Alors enfin, voici la question: comment puis-je assigner une classe pour ces parents .current-post-ancestor?

Je cherche une solution PHP. Javascript/jQuery est assez clair… voici une solution jQuery pour mieux comprendre ce que je veux faire (et pour ceux qui ont le même problème et qui sont satisfaits d'une solution JS):

jQuery( 'li.current-post-ancestor' ).parents( 'li.menu-item' ).addClass( 'current-menu-ancestor' );
1
GDY

Vous pouvez utiliser https://codex.wordpress.org/Class_Reference/Walker , et si vous souhaitez détecter un parent actif, vous pouvez l'utiliser.

if ( in_array( 'current-menu-ancestor', $classes) ) {
    $class_names .= ' is-active';
}
1
mcgoo

C'est probablement ce que vous recherchez.

add_filter( 'wp_nav_menu_objects', 'add_menu_parent_class' );
function add_menu_parent_class( $items ) {

    $parents = array();
    foreach ( $items as $item ) {
        if ( in_array('current-post-ancestor', $item->classes)  ) {
            $parents[] = $item->menu_item_parent;
        }
    }

    foreach ( $items as $item ) {
        if ( in_array( $item->ID, $parents ) ) {
            $item->classes[] = 'current-menu-ancestor'; 
        }
    }

    return $items;    
}

Cela ajoutera une classe au post post actuel item de menu parent. J'ai essayé cela dans mon thème et cela fonctionne parfaitement.

0
Raitul Islam