wp_nav_menu no genera padres / antepasado clases
-
16-10-2019 - |
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
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';
- ID deben coincidir.
- Debe ser del tipo
post_type
. - 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 ...