2010-08-24 12 views
7

¿es posible agregar algún tipo de clase como 'flecha' o un lapso dentro de los menús que tienen submenús (en Wordpress)? parece que puede hacer esto usando javascript, pero quiero saber si hay una solución PHP ...PHP/Wordpress: agregue flechas a los menús principales

en WP 3.0, vi que los menús activos tienen las clases "principal" o "ancestro" en ellos , pero esto es solo para el menú activo, y también lo necesito para los inactivos

+0

¿Está utilizando el generador de menú en 3.0? ¿O estás usando páginas o categorías para navegación? Por favor, elabore cómo obtiene los menús e ilustre con su código de trabajo para que podamos ayudarlo mejor. – kevtrout

+0

estoy usando los menús personalizados incorporados – Alex

Respuesta

12

¡Esta funcionalidad realmente debería estar en el núcleo de WordPress!
De todos modos, eché un vistazo a la fuente de la plantilla del menú que envió en un comentario sobre la otra respuesta, y encontré una forma (bastante cobarde) de agregar una clase a los elementos del menú con niños. Básicamente subclasifica al andador predeterminado para extender su comportamiento predeterminado. Probablemente sea mejor si lo coloca en el tema functions.php. Aquí está el código:

<?php 
class Arrow_Walker_Nav_Menu extends Walker_Nav_Menu { 
    function display_element($element, &$children_elements, $max_depth, $depth=0, $args, &$output) { 
     $id_field = $this->db_fields['id']; 
     if (!empty($children_elements[$element->$id_field])) { 
      $element->classes[] = 'arrow'; //enter any classname you like here! 
     } 
     Walker_Nav_Menu::display_element($element, $children_elements, $max_depth, $depth, $args, $output); 
    } 
} 
?> 

llamarlo, tendrá que añadir el argumento walker cuando llame wp_nav_menu() en su tema, así:

<?php 
wp_nav_menu(array('walker' => new Arrow_Walker_Nav_Menu, [other arguments...])) 
?> 

la esperanza de que funcione para usted! Solo lo he probado superficialmente, pero parece funcionar. Avíseme si hay algún caso límite en el que la adición de la clase falle.

+0

¡Mierda! ¡Funciona! gracias: D – Alex

+0

hay una situación donde falla: cuando hay una función de devolución de llamada especificada en los argumentos (fallback_cb), es decir. cuando no tiene un menú personalizado creado, wp_nav_menu recuperará los elementos del menú de la función wp_page_menu(), que utiliza un Walker diferente. Creo que – Alex

+0

Sí - el andador utilizado por wp_page_menu no permite la adición de clases de manera tan fácil. Echaré un vistazo y veré si puedo pensar en una solución en los próximos días y editaré mi respuesta si encuentro algo. –

3

No conozco ningún soporte nativo de WordPress, pero podría hacerlo fácilmente usando jQuery.

<script type="text/javascript"> 
$("#menu-id ul li:has(ul)").addClass("parent"); 
</script> 
+0

gracias, lo sabía. Me preguntaba si hay una forma de hacer esto con PHP. El problema con el método de JS es que se obtiene un pequeño "parpadeo" durante la carga de la página, si los elementos de menú tienen una anchura variable – Alex

+0

Así que usted está pidiendo una manera de modificar el código HTML que está generando WP ya que lo genera , ¿entonces? ¿No hay soporte incorporado para eso o solo puedes personalizar tus plantillas? – Rup

+0

bien que se puede obtener toda la producción de menú (una cadena) y modificarlo antes de que se hizo eco, pero no sabe lo que podría cambiar allí ... la plantilla de menú está aquí: http: //core.trac .wordpress.org/browser/trunk/wp-includes/nav-menu-template.php – Alex

0

La forma más sencilla y humilde para agregar los padres de clase al menú principal si tiene sub menú

Y el estilo es

<style type="text/css"> 
     .main-navigation .parent > a, .main-navigation .parent > a:hover { 
      background-image: url("images/arrow.png"); 
      background-position: right center; 
      background-repeat: no-repeat; 
    } 

    </style> 
3

Si eres como yo y desea añadir una flecha HTML en un lapso de su padre elemento de menú, añadir una línea como esta en el interior del cliente de clase andador de Donald Harvey:

$element->title .= '<span class="caret down-caret">&#x25BC;</span>'; 

También puede agregar ese código HTML directamente a la etiqueta del menú en la página de menú administrador de WP, pero esa no es una buena manera de hacerlo.

blogged un poco acerca de esto aquí http://cameronnokes.com/blog/adding-an-icon-to

0

No sé cuál es la pregunta, pero podemos añadir flecha de menú css así:

.menu li > a:after { 
    color: #fff; 
    content: ' ▾'; 
} 

.menu li > a:only-child:after { 
    content: ''; 
} 
1

basta con pegar esto en el CSS código y funcionará como se esperaba.

.nav-menu li > a:after { 
    color: #888; 
    content: ' ▾'; 
} 

.nav-menu li > a:hover:after { 
    color: #444; 
    content: ' ▾'; 
} 

.nav-menu li > a:only-child:after { 
    content: ''; 
} 

Ps. No olvide configurar su página UTF-8

Cuestiones relacionadas