Tutoriales de WordPress de Confianza, cuando más los necesitas.
Guía para Principiantes de WordPress
Copa WPB
25 Millones+
Sitios web que usan nuestros plugins
16+
Años de experiencia en WordPress
3000+
Tutoriales de WordPress de expertos

Cómo agregar descripciones de menú en tus temas de WordPress

El sistema de menús de WordPress tiene una función integrada donde puedes agregar descripciones a los elementos del menú. Sin embargo, esta función está oculta por defecto. Incluso cuando está habilitada, mostrarlas no es compatible sin agregar algo de código. La mayoría de los temas no están diseñados teniendo en cuenta las descripciones de los elementos del menú. En este artículo, te mostraremos cómo habilitar las descripciones de menú en WordPress y cómo agregar descripciones de menú en tus temas de WordPress.

Cómo agregar descripciones de menú en temas de WordPress

Nota: Este tutorial requiere que tengas un buen entendimiento de HTML, CSS y desarrollo de temas de WordPress.

¿Cuándo y por qué querrías agregar descripciones a los menús?

Algunos usuarios creen que agregar descripciones a los menús ayudará con el SEO. Sin embargo, creemos que la razón principal por la que querrías usarlas es para ofrecer una mejor experiencia de usuario en tu sitio.

Las descripciones se pueden usar para decirle a los visitantes qué encontrarán si hacen clic en un elemento del menú. Una descripción intrigante atraerá a más usuarios a hacer clic en los menús.

Descripciones del menú

Paso 1: Activar descripciones de menú

Ve a Apariencia » Menús. Haz clic en el botón Opciones de pantalla en la esquina superior derecha de la página. Marca la casilla de Descripciones.

Habilitar descripciones de menú en WordPress

Esto habilitará el campo de descripciones en tus elementos de menú. Así:

Campo de descripción agregado a los elementos del menú

Ahora puedes agregar descripciones a los elementos de tu menú de WordPress. Sin embargo, estas descripciones aún no aparecerán en tus temas. Para mostrar las descripciones de menú, tendremos que agregar algo de código.

Paso 2: Agregar la clase walker:

La clase Walker extiende la clase existente en WordPress. Básicamente, solo agrega una línea de código para mostrar las descripciones de los elementos del menú. Agrega este código en el archivo functions.php de tu tema.

class Menu_With_Description extends Walker_Nav_Menu {
	function start_el(&$output, $item, $depth, $args) {
		global $wp_query;
		$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
		
		$class_names = $value = '';

		$classes = empty( $item->classes ) ? array() : (array) $item->classes;

		$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
		$class_names = ' class="' . esc_attr( $class_names ) . '"';

		$output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';

		$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
		$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
		$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
		$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';

		$item_output = $args->before;
		$item_output .= '<a'. $attributes .'>';
		$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
		$item_output .= '<br /><span class="sub">' . $item->description . '</span>';
		$item_output .= '</a>';
		$item_output .= $args->after;

		$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
	}
}

Paso 3. Habilitar Walker en wp_nav_menu

Los temas de WordPress usan la función wp_nav_menu() para mostrar menús. También hemos publicado un tutorial para principiantes sobre cómo agregar menús de navegación personalizados en temas de WordPress. La mayoría de los temas de WordPress agregan menús en la plantilla header.php. Sin embargo, es posible que tu tema haya utilizado algún otro archivo de plantilla para mostrar menús.

Lo que necesitamos hacer ahora es encontrar la función wp_nav_menu() en tu tema (lo más probable es que esté en header.php) y cambiarla así.

<?php $walker = new Menu_With_Description; ?>

<?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu', 'walker' => $walker ) ); ?>

En la primera línea, establecemos $walker para usar la clase walker que definimos anteriormente en functions.php. En la segunda línea de código, el único argumento adicional que necesitamos agregar a nuestros argumentos existentes de wp_nav_menu es 'walker' => $walker.

Paso 4. Estilizando las descripciones

La clase walker que agregamos anteriormente muestra las descripciones de los elementos en esta línea de código:

$item_output .= '<br /><span class="sub">' . $item->description . '</span>';

El código anterior agrega un salto de línea al elemento del menú añadiendo una etiqueta
y luego envuelve tus descripciones en un span con la clase sub. Así:

<li id="menu-item-99" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="http://www.example.com/about/">About<br /><span class="sub">Who are we?</span></a></li>

Para cambiar cómo aparecen tus descripciones en tu sitio, puedes agregar CSS en la hoja de estilos de tu tema. Estuvimos probando esto en Twenty Twelve y usamos este css.

.menu-item {
border-left: 1px solid #ccc;
}

span.sub { 
font-style:italic;
font-size:small;
}

Esperamos que encuentres útil este artículo y que te ayude a crear menús con descripciones geniales en tu tema. ¿Preguntas? Déjalas en los comentarios a continuación.

Recursos adicionales

Cómo estilizar menús de navegación de WordPress

Cómo agregar elementos personalizados a menús específicos de WordPress

Menús con clase de descripción de Bill Erickson

Descargo de responsabilidad: Nuestro contenido es compatible con el lector. Esto significa que si haces clic en algunos de nuestros enlaces, podemos ganar una comisión. Consulta cómo se financia WPBeginner, por qué es importante y cómo puedes apoyarnos. Aquí está nuestro proceso editorial.

El Kit de herramientas definitivo para WordPress

Obtén acceso GRATUITO a nuestro kit de herramientas: ¡una colección de productos y recursos relacionados con WordPress que todo profesional debería tener!

Interacciones del lector

51 CommentsLeave a Reply

  1. En PHP 8.0 y superior, esto generará un error crítico.

    Necesitas encontrar esta línea:
    function start_el( $output, $item, $depth, $args ) {

    Cambiar esa línea a la siguiente debería hacer que el error desaparezca:
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

  2. Para agregar descripciones de menú en mis temas de WordPress, hice los pasos 1 y 2 de este blog, pero no pude seguir el paso 3 para avanzar y realizar el cambio total.

    • Si no puedes encontrar la función en tu tema, te recomendamos contactar al soporte de tu tema específico y ellos deberían poder ayudarte.

      Administrador

  3. Hola,
    ¿Cómo deshabilitar la descripción de la categoría de producto en max mega menu?
    Ya he ido a Mega Menu > General Settings y he configurado Menu Item Descriptions en disabled, pero el problema persiste.

    • Deberías contactar al soporte del plugin y ellos podrán ayudarte con la configuración que no funciona correctamente.

      Administrador

  4. Hola.. Por favor Ayuda..
    ¿Cómo agregar el título de la categoría, sin usar la descripción del título de la categoría?

  5. Hola a todos,

    ¿Alguna idea de cómo permitir etiquetas html en la descripción?
    remove_filter(‘nav_menu_description’, ‘strip_tags’);
    esta no me funciona.

    • @Iryna: ¿Puedes publicar tu código en algún sitio, por ejemplo pastebin.com.
      Dónde llamas a remove_filter() determinará si funciona – tiene que ser llamado después de la llamada a add_filter().
      Llamarlo justo antes de la llamada a wp_nav_menu() podría funcionar.

  6. Oye amigo, agregué la clase walker a functions.php, pero no encuentro wp_nav_menu en el tema genesis. ¿Qué me falta? ¡¡¡No tengo idea de qué hacer a continuación?!?!

  7. Muchas gracias por este tutorial. Me lo recomendaron y funcionó perfectamente para hacer los cambios que quería. Sin embargo, al hacer estos cambios, perdí mis menús desplegables de subelementos. ¿Alguna idea de qué afectó eso en el cambio de código?

    Gracias por tu tiempo y tutorial

  8. He implementado las descripciones del menú y funcionó muy bien. Ahora mi cliente está pidiendo un salto de línea dentro de una de las descripciones. He intentado poner un retorno de carro e insertar una etiqueta
    en el campo de descripción a través del administrador. No aparece en el front-end. WP elimina estas ediciones. ¿Hay alguna manera de remediar esto?

  9. ¡Gracias! He estado trabajando en WordPress durante años y nunca había oído hablar de esto. Estaba buscando eliminar las descripciones, ya que eran muy redundantes en el sitio en el que estoy trabajando. Busqué por todas partes de dónde venían.

    ¡Oh, qué alegría!

  10. ¡Funciona!

    pero para php 5.4 tendrás que igualar los argumentos del walker de wp para la función start_el:

    function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 )

    y busca y reemplaza $item con $object.

  11. Perfecto. Esto era justo lo que necesitaba para terminar un sitio. Tuve algunos problemas con el CSS, pero finalmente lo resolví y lo hice funcionar. Gracias por los excelentes artículos.

  12. Necesitaba crear lo mismo y estaba totalmente perdido.

    Estaba planeando hacer algunas cosas estúpidas para que esto se hiciera.

    ¡Gracias a Dios que encontré esta publicación y ahorré tiempo y estrés!

    Simplemente amo este sitio, aprendí tantas cosas.

    Muchas gracias por mostrar las cosas más fáciles aquí.

    • La etiqueta span también aparece en los submenús.

      no se muestra ahí, pero ocupa tanto espacio que se ve muy mal.

      ¿Hay alguna solución para lo mismo??

  13. Este es realmente un gran tutorial y me preguntaba si esto funcionaría en Thesis 1.8.5. Si no, sería genial si pudieras proporcionar uno. Ciertamente te ayudaré a publicarlo. ¡Pulgares arriba!

  14. Seguí tu tutorial y agregué una descripción a mi menú. ¡Gracias! Sin embargo, cuando estoy en modo móvil, el menú se convierte en un menú desplegable y el título del menú y la descripción se conectan. Por ejemplo, si mi elemento de menú es “acerca de” y la descripción “más sobre mí”, la versión móvil muestra “acerca demás sobre mí”. ¿Hay alguna forma de solucionar esto?

    • Tuve el mismo problema. Esto es lo que hice.

      Cambié esto:
      $description = ! empty( $item->description ) ? ‘<span>’.esc_attr( $item->description ).'</span>’ : ”;

      A esto:
      $description = ! empty( $item->description ) ? ‘<br /><span>’.esc_attr( $item->description ).'</span>’ : ”;

      No estoy seguro de si es la mejor solución, pero a mí me funcionó.

      • Gracias chicos, me encontré con lo que SVET y DAVID hicieron con el menú móvil.
        El código parece haber cambiado mi cambio fue simplemente agregar un span con el separador de guiones y en mi consulta de escritorio simplemente lo suprimí ya que no era necesario allí.

        $item_output .= ‘ – ‘;

        Dentro de mi consulta "Solo Escritorio" establecí el span en display none;
        @media only screen and (min-width: 740px) {
        header #submenu li span.dash { display:none; }

        Espero que eso ayude, manejó mi problema muy bien.

  15. Gran publicación. He intentado investigar esto antes, pero las instrucciones anteriores que encontré no fueron tan fáciles de seguir. Pude insertar el código de functions.php, averiguar cómo cambiar la clase walker en mi archivo de encabezado (diferente para el tema que uso, pero sencillo) y poner las cosas en marcha en unos 15 minutos de principio a fin.

    Una pieza que quizás quieras agregar es cómo incluir el borde derecho en el último elemento del menú usando la propiedad :last-child.


    .menu-item:last-child { color: #ccc; }

  16. En lugar de extender Walker_Nav_Menu, sería bueno (y más fácil) si se proporcionara un filtro, por ejemplo: Si el código principal tuviera: $item_output .= apply_filters( ‘walker_nav_menu_description’, $item->description);

    Entonces la función de filtro personalizada solo tendría: return "" . $description . "";

Deja una respuesta

Gracias por elegir dejar un comentario. Ten en cuenta que todos los comentarios son moderados de acuerdo con nuestra política de comentarios, y tu dirección de correo electrónico NO será publicada. Por favor, NO uses palabras clave en el campo del nombre. Tengamos una conversación personal y significativa.