web-dev-qa-db-fra.com

wp_nav_menu () marque l'ancêtre de l'élément actuel du type de publication personnalisé

Cette solution fait presque ce que je veux.

La seule chose est que mon menu est configuré comme suit:

Menu item 1
Menu item 2
   Custom post type 1
   Custom post type 2
   Custom post type 3
Menu item 3

En utilisant la solution mentionnée, la balise "current_url" est ajoutée au sous-menu du type de message personnalisé dans lequel je me trouve ("Type de message personnalisé 1"). Mais je veux qu'il ajoute un "current_menu_item" (ou quelque chose) à "l'élément de menu 2".

Un moyen de faire ça?

2
Lisa

Je fais ce qui suit, cela peut être long si vous avez plusieurs types de post, n'hésitez pas à le modifier cependant:

/** Edit Nav Menu calsses **/
function custom_wp_nav_classes($classes, $item){
    global $post;
    $page_blog = get_option('page_for_posts');

    if(is_tax('my_taxonomy_name_here') || is_singular('my_post_type_name_here')){

        /** Remove Active Class from Blog **/
        if($item->object_id == $page_blog)
            $classes = array_filter($classes, "remove_parent");

        /** Page ID of what you want to be active **/
        if($item->object_id == 12)
            $classes[] = 'current_page_parent';
    }

    return $classes;
}
add_filter('nav_menu_css_class' , 'custom_wp_nav_classes' , 10 , 2);

// Remove Active Class from Blog when viewing CPTs
function remove_parent($var){
    if ($var == 'current_page_parent' || $var == 'current-menu-item' || $var == 'current-page-ancestor') { return false; }
    return true;
}
1
Howdy_McGee

WordPress gère cela en ajoutant la classe current_page_ancestor et/ou current_page_parent à l'élément parent. Essayez de styler ces classes de manière similaire à current_menu_item.

0
Joshua Abenazer