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;
}
Bonjour,
Votre morceau de code m’intéresse beaucoup dans la mesure où les classes current-menu-item current_page_item sont utilisées dans mon thème WP (j’utilise Jkreativ), malheureusement j’obtiens une erreur sur la ligne 9 :
« Trying to get property of non-object »…
Même en ne gardant que le début de la ligne de test :
(get_post_type() != "post" && get_post_type() != "page")
, l’erreur est toujours là…Je sèche, si jamais vous avez une idée !
Bonjour Laurent,
C’est une bonne idée d’avoir testé en supprimant les 2 dernières conditions.
Quand vous les supprimez, l’erreur devrait changer normalement. Si c’est bien le cas, pourriez-vous me dire ce qu’elle affiche ?
Bonjour Pierre, merci pour votre retour,
Voici le comportement exact que j’observe aujourd’hui :
– l’erreur ne survient que lorsque je suis dans une page interne d’un sous-menu, par exemple cette page (page accessible depuis livre album / exemple d’album) et le menu ne se construit pas
– si je supprime la seconde partie du test if pour ne laisser que
if get_post_type() != "post" && get_post_type() != "page"
, alors il n’y a plus d’erreur, mais tous les menus passent en gras (qui est l’indicateur de menu actif)…le code est dans le fichier functions.php du child theme Jkreativ, lequel fichier ne possède pas d’autre code…
Voici le message d’erreur complet :
Notice: Trying to get property of non-object in /home/photosap/www/photographe-mariage-savoie/wp-content/themes/jkreativ-child/functions.php on line 9
Je me demande si le pb ne vient pas du fait que la page en question (un article de custom post type portfolio) n’a pas d’entrée dans le menu (seulement son parent y est présent : les exemples d’albums…)