Cuando WordPress 3 nos presentó la nueva funcionalidad de Menús, cambió la forma en que veíamos los menús de navegación para siempre. Ya no estábamos obligados a utilizar las funciones normales de listado de páginas ni a crear nuestras propias funciones de menú personalizadas para integrar los menús de categorías y páginas, así como los elementos externos o enlazados dentro de un menú de navegación. ¿Pero qué tan personalizado podemos obtener con esta nueva funcionalidad? En este tutorial, profundizaremos en todo lo que el wp_nav_menu
la función puede hacer, use la Clase Walker para agregar una sub descripción y toque algunas de sus funciones relacionadas.
La función tiene varios parámetros para trabajar. Estos son los valores predeterminados que se enumeran en el Códice WordPress.org:
, 'menu' =>, 'container' => 'div', 'container_class' => 'menu- menu slug -container', 'container_id' =>, 'menu_class' => 'menu', 'menu_id' = >, 'Echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' =>, 'after' =>, 'link_before' =>, 'link_after' =>, 'items_wrap' => '
Usando este parámetro, podemos establecer una ubicación de tema que luego se usa en la página de Menús para configurar un menú que funcione en esa parte de su tema, sin tener que definir manualmente qué menú debería aparecer allí. Esto es muy útil para los distribuidores de temas porque puede usar condicionales para mostrar un menú solo si el usuario ha definido un menú para esa ubicación. El único otro requisito es que uses la función. register_nav_menu ()
para registrar esos lugares. Esto se hace generalmente desde sus archivos de funciones cuando configura la compatibilidad con los menús..
Comencemos a construir nuestros parámetros de función de menú personalizados asumiendo que hemos registrado una ubicación de tema llamada "primario
".
$ params = array ('theme_location' => 'primary');
Este parámetro se usa para definir manualmente qué menú debe usarse. En nuestro ejemplo, solo estamos configurando una ubicación de menú genérica y no definiendo una exacta para usar, pero si quisiéramos decirle a la función que use un menú llamado "Navegación principal", nuestros parámetros se verían así:
$ params = array ('theme_location' => 'primary', 'menu' => 'Primary Navigation');
Por defecto, nuestro menú estará envuelto en un div
, pero si eres como yo, normalmente no necesitas esto y probablemente quieras reducir la cantidad de div
s y otras etiquetas que se utilizan para mantener su código lo más ordenado posible. También podría usar este parámetro para definir una etiqueta diferente, como un html5 o
. En nuestro ejemplo, no queremos que un contenedor cambie los valores predeterminados del contenedor, ya que los estilos de tema de Twenty Eleven se basan en que esté allí..
Como puede suponer, estos parámetros se utilizan para establecer una clase y una identificación en el contenedor. Ya que estamos omitiendo todo esto, no tenemos necesidad de definir valores.
Estos funcionan igual que los parámetros anteriores, excepto que esta vez definitivamente queremos establecer una ID de "nav
"porque ese es el ID que usaremos en nuestra hoja de estilo para diseñar la barra de navegación.
$ params = array ('theme_location' => 'primary', 'container' => false, 'menu_id' => 'nav');
Puede usar este parámetro para indicar si desea mostrar (eco) los resultados o devolverlo para su uso en PHP. Este elemento es booleano, por lo que para devolverlo, simplemente establezca este parámetro en 0.
Esta es una función de devolución de llamada a la que puede recurrir si no se encuentra ningún menú. Por defecto usa el antiguo stand by wp_page_menu ()
y pasa todos los mismos parámetros a esta función también.
Estos elementos se utilizan para definir qué se puede colocar antes y después de las etiquetas de anclaje (). Puede usar estos para preceder a cada elemento con una barra vertical, o envolver los elementos de navegación en una etiqueta de intervalo.
Funcionan igual que los elementos anteriores que cubrimos, excepto que lo que usted defina estará dentro de las etiquetas de anclaje. Nuestro ejemplo no requiere que usemos estos, así que los ignoraremos y dejaremos que el elemento vacío predeterminado sea.
De forma predeterminada, los elementos se envuelven en una lista desordenada con el ID de menú y la clase de menú. Este parámetro te permite cambiar eso si así lo deseas..
Este parámetro es realmente bueno para cuando quiere usar el mismo menú dos veces pero no desea que se muestren elementos secundarios en la ubicación que está configurando con el wp_nav_menu ()
función. Por ejemplo, si desea que la navegación principal incluya un menú desplegable de segundo nivel, puede dejar esto en la configuración predeterminada. Luego, si desea utilizar los mismos elementos principales en una navegación de pie de página y omitir los elementos secundarios, puede configurar este parámetro a una profundidad de 1. El valor predeterminado "0" significa que se emitirán todos los niveles. Para mantener nuestro ejemplo conciso, asumimos que la navegación principal no incluye ningún elemento secundario.
El parámetro se usa para definir un objeto walker que se puede usar para manipular el funcionamiento de toda la función y generar su información. Repasaremos un buen ejemplo en la siguiente sección..
Para nuestro ejemplo, queremos agregar una descripción secundaria a cada elemento del menú principal. La funcionalidad para agregar la descripción en sí misma ya está implementada en el sistema de menús de WordPress. Para activar esto, vaya a Menús y luego presione la pestaña de opciones de pantalla en la esquina superior derecha. La opción que necesita para asegurarse de que se haga clic debe decir "Descripción". Con esto marcado, un elemento del menú ahora debería verse así:
Una vez que hayamos completado nuestras descripciones, tendremos que crear la clase walker y agregarla a la wp_nav_menu ()
parámetros Llamaremos a la clase description_navigation
así que nuestro código de parámetros completo debería verse así:
$ params = array ('theme_location' => 'primary', 'menu_id' => 'nav', 'walker' => new description_walker ()); wp_nav_menu ($ params);
Ahora estamos listos para agregar esas descripciones usando nuestra clase Walker:
la clase description_walker extiende Walker_Nav_Menu function start_el (& $ output, $ item, $ depth, $ args) global $ wp_query; $ sangría = ($ profundidad)? str_repeat ("\ t", $ depth): "; $ class_names = $ value ="; $ clases = vacío ($ item-> clases)? array (): (array) $ item-> classes; $ class_names = join (", apply_filters ('nav_menu_css_class', array_filter ($ classes), $ item)); $ class_names = ''; $ output. = $ indent. '
Muchas cosas están pasando aquí. Para obtener más información sobre las clases de Walker en general, permítame remitirlo a otro tutorial: Entender la clase de Walker. La parte más importante que debe entender aquí es que estamos reconstruyendo la salida de cada elemento de enlace y agregando la descripción. En la línea 19 del fragmento anterior puede ver dónde obtenemos la descripción del artículo, si existe, y hacer que sea el valor de $ descripcion
Envuelto en una etiqueta span para que podamos diseñar las descripciones por separado. Luego, en las líneas 24-29, donde volvemos a juntar el elemento del enlace, agregamos la descripción justo antes del cierre de la etiqueta de anclaje para que se convierta en parte del enlace en sí..
Usando el tema de Twenty Eleven, ahora deberías tener algo que se vea así:
Agreguemos un poco de estilo para que sea más legible:
#nav a line-height: 20px; relleno: 10px 15px; #nav a span display: block; tamaño de fuente: 11px; color: #ccc; #nav a: hover span color: # 999;
Esto cambiará la altura y el relleno de cada enlace, hará que la descripción dentro de la etiqueta span se caiga a su propia línea y ajustará un poco los tamaños y colores de la fuente para obtener un resultado final que se verá así:
No solo puedes usar wp_nav_menu ()
Para mostrar su menú con todas las personalizaciones, puede ir un poco más lejos con algunas de las funciones relacionadas..
has_nav_menu ()
Esta función es ideal para mostrar solo un menú en particular si ese menú ha sido asignado a la ubicación de su tema. Por ejemplo, es posible que desee crear una navegación superior en su tema para elementos de navegación menores que un usuario puede no desear en su navegación principal. Esto podría ser cosas como un enlace de inicio, "Anunciate con nosotros" u otras llamadas a la acción inferiores. Pero como distribuidor de temas, si no sabe si eso va a ser algo que el usuario quiere usar, simplemente use una condición como la siguiente:
if (has_nav_menu ('top-menu')) wp_nav_menu ('theme_location =' top-menu ');
wp_get_nav_menu_items ()
Esta función devolverá una serie de elementos de un menú en particular. Esto puede ser particularmente útil si desea crear una lista de menús personalizada sin utilizar una Clase Walker. Pierde muchas funcionalidades, como la clase actual del elemento de menú, pero es una excelente manera de recorrer una serie de elementos de menú para una solución simple..
Hay muchas cosas que puede hacer para personalizar sus menús de navegación cuando sepa más sobre la flexibilidad que se ofrece con los parámetros integrados y poder tener un mayor control con la Clase Walker. Necesidad de agregar otra etiqueta span con la clase de "icono
"para iconos personalizados para cada elemento? No hay problema.
Ser capaz de tener un control total sobre la ubicación y la salida de los menús amplía sus capacidades como desarrollador de temas en una cantidad de posibilidades inmensurable. ¿Cuáles son algunas de las cosas que puede usar esa clase de Walker para hacer??