Ajouter la classe current_page_item pour les custom post types & pour les menus parents

Les custom post types c’est le bien dans WordPress, afin de pouvoir créer des pages personnalisées pour des clients, tout en gardant la possibilité de modifier facilement les contenus.

Le seul hic est que, par défaut, lorsque vous ajouterez votre post type à votre menu et que vous appellerez la fonction wp_nav_menu() pour l’afficher, lorsque vous serez dans un single-post-type, votre menu ne sera plus en évidence !

Voici un petit bout de code, à placer dans votre functions.php, qui permet de résoudre ce problème.

Il gère également le fait que lorsque vous êtes sur une page qui est un enfant dans le menu, le parent porte également la classe current_page_item.

Il est bien évidemment possible de définir des classes différentes que « current_page_item » en la modifiant dans le code 🙂

// Navigation active item
add_filter('nav_menu_css_class', 'nav_parent_class', 10, 2);

function nav_parent_class($classes, $item) {
    global $wpdb;
    $item_slug = get_page_by_title($item->title, OBJECT, 'page');
    $page = get_page(get_the_ID());
    // Custom Post Type
    if ((get_post_type() != "post" && get_post_type() != "page") && $page->post_type == $item_slug->post_name && !is_admin()) {
        $classes[] = 'current-menu-item current_page_item';
    } 
    // Sub-menu
    else if ($page->post_parent && $page->post_parent == $item_slug->ID) {
        $classes[] = 'current-menu-item current_page_item';
    }
    return $classes;
}
current-custom-post-type

Depuis la page single-post-type, mon menu post-type est automatiquement mis en évidence

current-parent

Depuis la page enfant « Plan », mon menu « Infos pratiques » est mis en évidence automatiquement

 

Leave a Reply