Question

Je ne sais pas pourquoi les classes appropriées pour élément de menu ne sont pas générés - tous les éléments de l'arbre qui a sous-arbre get ne menu-item menu-item-type-post_type. Les éléments qui ne sont pas les enfants, obtiennent des classes appropriées après avoir été cliqués (actif).

Lien: http://lichens.ie/

Partie de la structure de 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.ie/view-lichens-by/lichens-by -HABITAT / vous pouvez voir qu'il n'a pas de classe « actuelle ». En plus des parents est tout.

PS Désolé pour l'affichage « pas de liens de travail » - c'est à cause de la réputation limitation

Toutes les idées -. L'aide appréciée

Était-ce utile?

La solution

Cela fait partie du code dans _wp_menu_item_classes_by_context() que les poignées de classe actuelle 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';
  1. ID doivent correspondre.
  2. Il doit être de type post_type.
  3. requête doit être pour is_singular.

Deuxième point peut être exclu, parce que la classe CSS pour le type d'article est généré correctement. Donc, quelque chose va mal soit avec les ID ou is_singular conditionnel.

Êtes-vous en cours d'exécution des boucles secondaires à la page? La plupart de raison commune à conditionals rupture est une mauvaise utilisation de query_posts().

Autres conseils

Je ne sais pas pourquoi sa ne fonctionne pas dans votre cas ... Comme vous dites, la page active devrait obtenir « current_menu_item », a ajouté à ses classes. Si vous éprouvez des difficultés pour une raison d'une autre, vous pouvez toujours utiliser le filtre « nav_menu_css_class » pour ajouter vos propres classes. Ce petit morceau de code sera essentiellement dupliquer les « current_menu_item » & « current_menu_parent » des classes, et ajoutez une classe « has_children » (utile pour les menus extensibles ou déroulant):

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 savoir pourquoi la fonctionnalité intégrée ne fonctionne pas pour vous avant de piratage jusqu'à quelque chose à dupliquer, mais vous pouvez faire beaucoup avec ce filtre si nécessaire ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top