Pregunta

No sé por qué no se generan las clases adecuadas para la opción de menú - todos los elementos en el árbol que tiene get subárbol sólo se menu-item menu-item-type-post_type. Los elementos, que no tienen hijos, reciben clases adecuadas después de haber hecho clic (activo).

Enlace: http://lichens.ie/

Una parte de la estructura del menú: http://imgur.com/5Lj00.png

Código

$args = array(
    'menu'      => 'Main menu',
    'container' => '',
    'menu_id'   => 'nav',
);
wp_nav_menu($args);

Cuando usted visita, por ejemplo, http://lichens.ie/view-lichens-by/lichens-by -Hábitat / se puede ver que no tiene ninguna clase de 'corriente'. Así como de los padres.

PS Lo siento por desplazamiento 'Enlaces no funcionan' - es debido a la reputación limitación

Todas las ideas -. Apreciada ayuda

¿Fue útil?

Solución

Esto es parte del código en _wp_menu_item_classes_by_context() que los mangos de la clase actual de páginas:

// 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 deben coincidir.
  2. Debe ser del tipo post_type.
  3. Consulta debe ser para is_singular.

El segundo punto se puede excluir, porque la clase CSS de tipo de elemento se genera correctamente. Así que algo va mal, ya sea con o identificaciones is_singular condicional.

¿Está ejecutando ningún bucles secundarias en la página? La mayor razón común para los condicionales a la rotura es el uso incorrecto de query_posts().

Otros consejos

No sé por qué no su trabajo en su caso ... Como usted dice, la página activa debería estar recibiendo 'current_menu_item' añadido a sus clases. Si estás teniendo problemas, por una razón de otra, siempre se puede utilizar el filtro 'nav_menu_css_class' para añadir sus propias clases. Este pequeño trozo de código será esencialmente duplicar las clases 'current_menu_item' y 'current_menu_parent', y añadir una clase '' has_children (útil para los menús desplegables o 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);

Por supuesto, usted quiere averiguar por qué la funcionalidad integrada no funciona para usted antes de cortar algo para duplicarlo, pero se puede hacer mucho con ese filtro si es necesario ...

Licenciado bajo: CC-BY-SA con atribución
scroll top