2012-09-03 51 views
16

Estoy familiarizado con WordPress y el sistema de menú de WordPress. Pero estoy buscando una forma de agregar HTML personalizado al wp_nav_menu().Cómo agregar HTML personalizado a wp_nav_menu?

Estoy intentando crear un menú como este: enter image description here

Aviso cómo el menú desplegable bajo productos contiene una imagen y un enlace. Me gustaría volver a crear esto. He visto algunos complementos, pero preferiría codificarlo.

No me importa codificar la imagen y el enlace, pero me gustaría mantener la flexibilidad de usar WordPress para administrar los menús.

+0

Descubrí cómo hacer esto con un código mucho menor que el uso de un andador personalizado: http://stackoverflow.com/questions/26079190/add-featured-image-to-wp-nav-menu-items/26079191 –

+0

cómo saber la diferencia bweteen top level headin y otro título? desea eliminar la etiqueta de los elementos de nivel superior solamente ... –

Respuesta

54

La manera en que WordPress pasa por las páginas del menú para mostrar los elementos, está utilizando un objeto andador. En este caso, la clase específica para este objeto se llama Walker_Nav_Menu. Puede encontrarlo en wp-includes\nav-menu-template.php.

El Walker_Nav_Menu es una clase bastante simple. Puede ver cómo se crean allí los enlaces y la estructura del menú. Las funciones start_el y end_el se utilizan para crear los elementos del menú. Las funciones start_lvl y end_lvl son para anidar menús. En este enfoque, utilizaremos principalmente start_el y end_el.

En su functions.php crear una clase, para extender Walker_Nav_Menu con métodos muy similares a la clase padre:

class Custom_Walker_Nav_Menu extends Walker_Nav_Menu { 
    function start_el (&$output, $item, $depth = 0, $args = array(), $id = 0) { 
    // Copy all the start_el code from source, and modify 
    } 

    function end_el(&$output, $item, $depth = 0, $args = array()) { 
    // Copy all the end_el code from source, and modify 
    } 
} 

En esas funciones, el $item es su elemento de menú, con la que se pueden consultar los contenidos adicionales de acuerdo al elemento de menú actual, si lo desea. Tenga en cuenta que no incluí start_lvl y end_lvl, pero eso no importa, ya que su clase heredará automáticamente los métodos de clases principales, si no se sobrescribe.

Luego, en sus archivos del tema, puede llamar wp_nav_menu así:

wp_nav_menu(array(
    'theme_location' => 'main', 
    'container' => false, 
    'menu_id' => 'nav', 
    'depth' => 1, 
    // This one is the important part: 
    'walker' => new Custom_Walker_Nav_Menu 
)); 

WordPress utilizará su clase y las funciones personalizadas, por lo que se pueden modificar lo que el código es la salida.

+0

Gracias Martin, voy a echar un vistazo a esto con cierto detalle esta noche. Supongo que agrego mi HTML personalizado en el start_el? – StephenMeehan

+0

Sí, claro. También podría agregar una etiqueta html de apertura en el start_el, y cerrarla en el end_el, pero puede hacerlo simple;) – martinczerwi

+0

Respuesta simple y agradable gracias +1 – jycr753

Cuestiones relacionadas