Je ne sais pas pourquoi les classes appropriées pour les éléments de menu ne sont pas générées - tous les éléments de l’arbre contenant un sous-arbre n’obtiennent que menu-item menu-item-type-post_type
. Les éléments, qui n'ont pas d'enfants, obtiennent les classes appropriées après avoir été cliqué (actif).
Lien: http://lichens.ie/
Partie de la structure du menu: http://imgur.com/5Lj00.png
Code
$args = array(
'menu' => 'Main menu',
'container' => '',
'menu_id' => 'nav',
);
wp_nav_menu($args);
Lorsque vous visitez par exemple http://lichens.fr/view-lichens-by/lichens-by-habitat/ vous pouvez voir qu'il n'a pas de classe 'actuelle'. Aussi bien que c'est parent.
PS Désolé de poster "liens qui ne fonctionnent pas" - c'est à cause de la limitation de la réputation
Toutes les idées - aide très appréciée.
Cela fait partie du code dans _wp_menu_item_classes_by_context()
qui gère la classe en cours pour les pages:
// if the menu item corresponds to the currently-queried post or taxonomy object
} elseif (
$menu_item->object_id == $queried_object_id &&
(
( ! empty( $home_page_id ) && 'post_type' == $menu_item->type && $wp_query->is_home && $home_page_id == $menu_item->object_id ) ||
( 'post_type' == $menu_item->type && $wp_query->is_singular ) ||
( 'taxonomy' == $menu_item->type && ( $wp_query->is_category || $wp_query->is_tag || $wp_query->is_tax ) )
)
) {
$classes[] = 'current-menu-item';
post_type
.is_singular
.Le deuxième point peut être exclu, car la classe CSS pour le type d'élément est générée correctement. Donc, quelque chose ne va pas avec les ID ou is_singular
conditionnel.
Exécutez-vous des boucles secondaires sur la page? La raison la plus courante de rupture conditionnelle est l'utilisation incorrecte de query_posts()
.
Je ne sais pas pourquoi cela ne fonctionne pas dans votre cas ... Comme vous le dites, la page active devrait recevoir "current_menu_item" ajoutée à ses classes. Si vous rencontrez des problèmes pour une raison ou une autre, vous pouvez toujours utiliser le filtre 'nav_menu_css_class' pour ajouter vos propres classes. Ce petit bout de code va essentiellement dupliquer les classes 'current_menu_item' & 'current_menu_parent' et ajouter une classe 'has_children' (utile pour les menus déroulants et extensibles):
function check_for_submenu($classes, $item) {
global $wpdb, $post;
if ($item->ID == $post->ID) array_Push($classes,'current_menu_item');
$has_children = $wpdb->get_var("SELECT COUNT(meta_id) FROM wp_postmeta WHERE meta_key='_menu_item_menu_item_parent' AND meta_value='".$item->ID."'");
if ($has_children > 0) {
array_Push($classes,'has_children');
$child_pages = $wpdb->get_col("SELECT c.meta_value FROM wp_postmeta AS c, wp_postmeta AS th
WHERE c.meta_key = '_menu_item_object_id' AND c.post_id = th.metavalue
AND th.meta_key= '_menu_item_menu_item_parent' AND th.post_id = {$item->ID}");
if (in_array($post->ID,$child_pages)) array_Push($classes,'current_menu_parent');
}
return $classes;
}
add_filter( 'nav_menu_css_class', 'check_for_submenu', 10, 2);
Bien sûr, vous voulez comprendre pourquoi la fonctionnalité intégrée ne fonctionne pas pour vous avant de pirater quelque chose pour la dupliquer, mais vous pouvez faire beaucoup avec ce filtre si nécessaire ...