Muestra un menú de navegación.

Parámetros

$ args

(formación) (Opcional) Matriz de argumentos del menú de navegación.

  • ‘menú’
    (int | cadena | WP_Term) Menú deseado. Acepta un ID de menú, slug, nombre u objeto.
  • ‘menu_class’
    (cuerda) Clase CSS que se utilizará para el elemento ul que forma el menú. ‘Menú’ predeterminado.
  • ‘menu_id’
    (cuerda) El ID que se aplica al elemento ul que forma el menú. El valor predeterminado es el menú slug, incrementado.
  • ‘envase’
    (cuerda) Si envolver el ul y con qué envolverlo. ‘Div’ predeterminado.
  • ‘clase_contenedor’
    (cuerda) Clase que se aplica al contenedor. Por defecto ‘menu- {menu slug} -container’.
  • ‘container_id’
    (cuerda) El ID que se aplica al contenedor.
  • ‘container_aria_label’
    (cuerda) El atributo aria-label que se aplica al contenedor cuando es un elemento de navegación.
  • ‘fallback_cb’
    (invocable | falso) Si el menú no existe, se activará una función de devolución de llamada. El valor predeterminado es “https://foroayuda.es/wordpress/functions/wp_page_menu”. Configúrelo en falso para que no haya retroceso.
  • ‘antes de’
    (cuerda) Texto antes del marcado del enlace.
  • ‘después’
    (cuerda) Texto después del marcado del enlace.
  • ‘link_before’
    (cuerda) Texto antes del texto del enlace.
  • ‘link_after’
    (cuerda) Texto después del texto del enlace.
  • ‘eco’
    (bool) Ya sea para hacer eco del menú o devolverlo. Verdadero por defecto.
  • ‘profundidad’
    (En t) Cuántos niveles de la jerarquía se incluirán. 0 significa todos. Por defecto 0. Por defecto 0.
  • ‘caminante’
    (objeto) Instancia de una clase de caminante personalizada.
  • ‘ubicación_tema’
    (cuerda) Ubicación del tema que se utilizará. Debe estar registrado con register_nav_menu () para que el usuario pueda seleccionarlo.
  • ‘items_wrap’
    (cuerda) Cómo se deben envolver los elementos de la lista. Utiliza el formato printf () con marcadores de posición numerados. El valor predeterminado es un ul con una identificación y una clase.
  • ‘item_spacing’
    (cuerda) Ya sea para conservar los espacios en blanco dentro del HTML del menú. Acepta ‘conservar’ o ‘descartar’. Por defecto ‘preservar’.

Valor predeterminado: array ()

Regreso

(vacío | cadena | falso) No válido si el argumento ‘echo’ es verdadero, la salida del menú si ‘echo’ es falso. Falso si no hay elementos o no se encontró ningún menú.

Más información

Uso

wp_nav_menu( $args );

Dado un ubicación_tema parámetro, la función muestra el menú asignado a esa ubicación. Si no existe tal ubicación o no se le asigna ningún menú, el parámetro fallback_cb determinará lo que se muestra.

Si no se le da un ubicación_tema parámetro, la función muestra

  • el menú que coincide con el ID, slug o nombre dado por el menú parámetro;
  • de lo contrario, el primer menú no vacío;
  • de lo contrario (o si el menú dado por menú está vacío), salida de la función dada por el fallback_cb parámetro (wp_page_menu (), por defecto);
  • de lo contrario, nada.

Clases de CSS de elementos de menú

Las siguientes clases se aplican a los elementos del menú, es decir, al HTML

  • etiquetas, generadas por wp_nav_menu():

    Todos los elementos del menú

    • .menu-item
      Esta clase se agrega a cada elemento del menú.
    • .menu-item-has-children
      Esta clase se agrega al elemento del menú que tiene subelementos.
    • .menu-item-object-{object}
      Esta clase se agrega a cada elemento del menú, donde {objeto} es un tipo de publicación o una taxonomía.
    • .menu-item-object-category
      Esta clase se agrega a los elementos del menú que corresponden a una categoría.
    • .menu-item-object-tag
      Esta clase se agrega a los elementos del menú que corresponden a una etiqueta.
    • .menu-item-object-page
      Esta clase se agrega a los elementos del menú que corresponden a páginas estáticas.
    • .menu-item-object-{custom}
      Esta clase se agrega a los elementos del menú que corresponden a un tipo de publicación personalizada o una taxonomía personalizada.
    • .menu-item-type-{type}
      Esta clase se agrega a cada elemento del menú, donde {tipo} es “post_type” o “taxonomía”.
    • .menu-item-type-post_type
      Esta clase se agrega a los elementos del menú que corresponden a los tipos de publicaciones: es decir, páginas estáticas o tipos de publicaciones personalizadas.
    • .menu-item-type-taxonomy
      Esta clase se agrega a los elementos del menú que corresponden a taxonomías: es decir, categorías, etiquetas o taxonomías personalizadas.

    Elementos del menú de la página actual

    • .current-menu-item
      Esta clase se agrega a los elementos del menú que corresponden a la página renderizada actualmente.

    Elementos del menú principal de la página actual

    • .current-menu-parent
      Esta clase se agrega a los elementos del menú que corresponden al padre jerárquico de la página actualmente renderizada.
    • .current-{object}-parent
      Esta clase se agrega a los elementos del menú que corresponden al padre jerárquico del objeto actualmente renderizado, donde {objeto} corresponde al valor usado para .menu-item-object- {object}.
    • .current-{type}-parent
      Esta clase se agrega a los elementos del menú que corresponden al padre jerárquico del tipo actualmente renderizado, donde {tipo} corresponde al valor usado para .menu-item-type- {type}.

    Elementos del menú del antepasado de la página actual

    • .current-menu-ancestor
      Esta clase se agrega a los elementos del menú que corresponden a un antepasado jerárquico de la página actualmente renderizada.
    • .current-{object}-ancestor
      Esta clase se agrega a los elementos del menú que corresponden a un antepasado jerárquico del objeto actualmente renderizado, donde {objeto} corresponde al valor usado para .menu-item-object- {object}.
    • .current-{type}-ancestor
      Esta clase se agrega a los elementos del menú que corresponden a un antepasado jerárquico del tipo actualmente renderizado, donde {tipo} corresponde al valor usado para .menu-item-type- {type}.

    Elementos del menú de la página principal del sitio

    • .menu-item-home
      Esta clase se agrega a los elementos del menú que corresponden a la página principal del sitio.

    Compatibilidad con versiones anteriores de wp_page_menu ()

    Las siguientes clases se agregan para mantener la compatibilidad con versiones anteriores [[Function Reference/wp_page_menu|wp_page_menu()]]función de salida:

    • .page_item
      Esta clase se agrega a los elementos del menú que corresponden a una página estática.
    • .page_item_has_children
      Esta clase se agrega a los elementos del menú que tienen subpáginas.
    • .page-item-$ID
      Esta clase se agrega a los elementos del menú que corresponden a una página estática, donde $ ID es el ID de la página estática.
    • .current_page_item
      Esta clase se agrega a los elementos del menú que corresponden a la página estática actualmente renderizada.
    • .current_page_parent
      Esta clase se agrega a los elementos del menú que corresponden al padre jerárquico de la página estática actualmente renderizada.
    • .current_page_ancestor
      Esta clase se agrega a los elementos del menú que corresponden a un antepasado jerárquico de la página estática actualmente renderizada.
  • Fuente

    Expediente: wp-includes / nav-menu-template.php

    function wp_nav_menu( $args = array() ) {
    	static $menu_id_slugs = array();
    
    	$defaults = array(
    		'menu'                 => '',
    		'container'            => 'div',
    		'container_class'      => '',
    		'container_id'         => '',
    		'container_aria_label' => '',
    		'menu_class'           => 'menu',
    		'menu_id'              => '',
    		'echo'                 => true,
    		'fallback_cb'          => "https://foroayuda.es/wordpress/functions/wp_page_menu",
    		'before'               => '',
    		'after'                => '',
    		'link_before'          => '',
    		'link_after'           => '',
    		'items_wrap'           => '<ul>%3$s</ul>',
    		'item_spacing'         => 'preserve',
    		'depth'                => 0,
    		'walker'               => '',
    		'theme_location'       => '',
    	);
    
    	$args = wp_parse_args( $args, $defaults );
    
    	if ( ! in_array( $args['item_spacing'], array( 'preserve', 'discard' ), true ) ) {
    		// Invalid value, fall back to default.
    		$args['item_spacing'] = $defaults['item_spacing'];
    	}
    
    	/**
    	 * Filters the arguments used to display a navigation menu.
    	 *
    	 * @since 3.0.0
    	 *
    	 * @see wp_nav_menu()
    	 *
    	 * @param array $args Array of wp_nav_menu() arguments.
    	 */
    	$args = apply_filters( 'wp_nav_menu_args', $args );
    	$args = (object) $args;
    
    	/**
    	 * Filters whether to short-circuit the wp_nav_menu() output.
    	 *
    	 * Returning a non-null value from the filter will short-circuit wp_nav_menu(),
    	 * echoing that value if $args->echo is true, returning that value otherwise.
    	 *
    	 * @since 3.9.0
    	 *
    	 * @see wp_nav_menu()
    	 *
    	 * @param string|null $output Nav menu output to short-circuit with. Default null.
    	 * @param stdClass    $args   An object containing wp_nav_menu() arguments.
    	 */
    	$nav_menu = apply_filters( 'pre_wp_nav_menu', null, $args );
    
    	if ( null !== $nav_menu ) {
    		if ( $args->echo ) {
    			echo $nav_menu;
    			return;
    		}
    
    		return $nav_menu;
    	}
    
    	// Get the nav menu based on the requested menu.
    	$menu = wp_get_nav_menu_object( $args->menu );
    
    	// Get the nav menu based on the theme_location.
    	$locations = get_nav_menu_locations();
    	if ( ! $menu && $args->theme_location && $locations && isset( $locations[ $args->theme_location ] ) ) {
    		$menu = wp_get_nav_menu_object( $locations[ $args->theme_location ] );
    	}
    
    	// Get the first menu that has items if we still can't find a menu.
    	if ( ! $menu && ! $args->theme_location ) {
    		$menus = wp_get_nav_menus();
    		foreach ( $menus as $menu_maybe ) {
    			$menu_items = wp_get_nav_menu_items( $menu_maybe->term_id, array( 'update_post_term_cache' => false ) );
    			if ( $menu_items ) {
    				$menu = $menu_maybe;
    				break;
    			}
    		}
    	}
    
    	if ( empty( $args->menu ) ) {
    		$args->menu = $menu;
    	}
    
    	// If the menu exists, get its items.
    	if ( $menu && ! is_wp_error( $menu ) && ! isset( $menu_items ) ) {
    		$menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'update_post_term_cache' => false ) );
    	}
    
    	/*
    	 * If no menu was found:
    	 *  - Fall back (if one was specified), or bail.
    	 *
    	 * If no menu items were found:
    	 *  - Fall back, but only if no theme location was specified.
    	 *  - Otherwise, bail.
    	 */
    	if ( ( ! $menu || is_wp_error( $menu ) || ( isset( $menu_items ) && empty( $menu_items ) && ! $args->theme_location ) )
    		&& isset( $args->fallback_cb ) && $args->fallback_cb && is_callable( $args->fallback_cb ) ) {
    			return call_user_func( $args->fallback_cb, (array) $args );
    	}
    
    	if ( ! $menu || is_wp_error( $menu ) ) {
    		return false;
    	}
    
    	$nav_menu = '';
    	$items    = '';
    
    	$show_container = false;
    	if ( $args->container ) {
    		/**
    		 * Filters the list of HTML tags that are valid for use as menu containers.
    		 *
    		 * @since 3.0.0
    		 *
    		 * @param string[] $tags The acceptable HTML tags for use as menu containers.
    		 *                       Default is array containing 'div' and 'nav'.
    		 */
    		$allowed_tags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'nav' ) );
    
    		if ( is_string( $args->container ) && in_array( $args->container, $allowed_tags, true ) ) {
    			$show_container = true;
    			$class          = $args->container_class ? ' class="' . esc_attr( $args->container_class ) . '"' : ' class="menu-' . $menu->slug . '-container"';
    			$id             = $args->container_id ? ' id="' . esc_attr( $args->container_id ) . '"' : '';
    			$aria_label     = ( 'nav' === $args->container && $args->container_aria_label ) ? ' aria-label="' . esc_attr( $args->container_aria_label ) . '"' : '';
    			$nav_menu      .= '<' . $args->container . $id . $class . $aria_label . '>';
    		}
    	}
    
    	// Set up the $menu_item variables.
    	_wp_menu_item_classes_by_context( $menu_items );
    
    	$sorted_menu_items        = array();
    	$menu_items_with_children = array();
    	foreach ( (array) $menu_items as $menu_item ) {
    		$sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
    		if ( $menu_item->menu_item_parent ) {
    			$menu_items_with_children[ $menu_item->menu_item_parent ] = true;
    		}
    	}
    
    	// Add the menu-item-has-children class where applicable.
    	if ( $menu_items_with_children ) {
    		foreach ( $sorted_menu_items as &$menu_item ) {
    			if ( isset( $menu_items_with_children[ $menu_item->ID ] ) ) {
    				$menu_item->classes[] = 'menu-item-has-children';
    			}
    		}
    	}
    
    	unset( $menu_items, $menu_item );
    
    	/**
    	 * Filters the sorted list of menu item objects before generating the menu's HTML.
    	 *
    	 * @since 3.1.0
    	 *
    	 * @param array    $sorted_menu_items The menu items, sorted by each menu item's menu order.
    	 * @param stdClass $args              An object containing wp_nav_menu() arguments.
    	 */
    	$sorted_menu_items = apply_filters( 'wp_nav_menu_objects', $sorted_menu_items, $args );
    
    	$items .= walk_nav_menu_tree( $sorted_menu_items, $args->depth, $args );
    	unset( $sorted_menu_items );
    
    	// Attributes.
    	if ( ! empty( $args->menu_id ) ) {
    		$wrap_id = $args->menu_id;
    	} else {
    		$wrap_id = 'menu-' . $menu->slug;
    
    		while ( in_array( $wrap_id, $menu_id_slugs, true ) ) {
    			if ( preg_match( '#-(d+)$#', $wrap_id, $matches ) ) {
    				$wrap_id = preg_replace( '#-(d+)$#', '-' . ++$matches[1], $wrap_id );
    			} else {
    				$wrap_id = $wrap_id . '-1';
    			}
    		}
    	}
    	$menu_id_slugs[] = $wrap_id;
    
    	$wrap_class = $args->menu_class ? $args->menu_class : '';
    
    	/**
    	 * Filters the HTML list content for navigation menus.
    	 *
    	 * @since 3.0.0
    	 *
    	 * @see wp_nav_menu()
    	 *
    	 * @param string   $items The HTML list content for the menu items.
    	 * @param stdClass $args  An object containing wp_nav_menu() arguments.
    	 */
    	$items = apply_filters( 'wp_nav_menu_items', $items, $args );
    	/**
    	 * Filters the HTML list content for a specific navigation menu.
    	 *
    	 * @since 3.0.0
    	 *
    	 * @see wp_nav_menu()
    	 *
    	 * @param string   $items The HTML list content for the menu items.
    	 * @param stdClass $args  An object containing wp_nav_menu() arguments.
    	 */
    	$items = apply_filters( "wp_nav_menu_{$menu->slug}_items", $items, $args );
    
    	// Don't print any markup if there are no items at this point.
    	if ( empty( $items ) ) {
    		return false;
    	}
    
    	$nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), $items );
    	unset( $items );
    
    	if ( $show_container ) {
    		$nav_menu .= '</' . $args->container . '>';
    	}
    
    	/**
    	 * Filters the HTML content for navigation menus.
    	 *
    	 * @since 3.0.0
    	 *
    	 * @see wp_nav_menu()
    	 *
    	 * @param string   $nav_menu The HTML content for the navigation menu.
    	 * @param stdClass $args     An object containing wp_nav_menu() arguments.
    	 */
    	$nav_menu = apply_filters( "https://foroayuda.es/wordpress/functions/wp_nav_menu", $nav_menu, $args );
    
    	if ( $args->echo ) {
    		echo $nav_menu;
    	} else {
    		return $nav_menu;
    	}
    }

    Relacionado

    Usos

    Usos Descripción
    wp-includes / formatting.php: esc_attr ()

    Escapar de atributos HTML.

    wp-includes / functions.php: wp_parse_args ()

    Fusiona argumentos definidos por el usuario en una matriz predeterminada.

    wp-includes / plugin.php: aplicar_filtros ()

    Llama a las funciones de devolución de llamada que se han agregado a un enlace de filtro.

    wp-includes / nav-menu-template.php: _wp_menu_item_classes_by_context ()

    Agrega las clases de propiedad de clase para el contexto actual, si corresponde.

    wp-includes / nav-menu-template.php: walk_nav_menu_tree ()

    Recupera el contenido de la lista HTML para los elementos del menú de navegación.

    wp-includes / nav-menu-template.php: wp_nav_menu_args

    Filtra los argumentos utilizados para mostrar un menú de navegación.

    wp-includes / nav-menu-template.php: pre_wp_nav_menu

    Filtra si se debe cortocircuitar la salida wp_nav_menu ().

    wp-includes / nav-menu-template.php: wp_nav_menu_container_allowedtags

    Filtra la lista de etiquetas HTML que son válidas para su uso como contenedores de menú.

    wp-includes / nav-menu-template.php: wp_nav_menu_objects

    Filtra la lista ordenada de objetos de elementos de menú antes de generar el HTML del menú.

    wp-includes / nav-menu-template.php: wp_nav_menu_items

    Filtra el contenido de la lista HTML para los menús de navegación.

    wp-includes / nav-menu-template.php: wp_nav_menu _ {$ menu-> slug} _items

    Filtra el contenido de la lista HTML para un menú de navegación específico.

    wp-includes / nav-menu-template.php: wp_nav_menu

    Filtra el contenido HTML para los menús de navegación.

    wp-includes / nav-menu.php: wp_get_nav_menus ()

    Devuelve todos los objetos del menú de navegación.

    wp-includes / nav-menu.php: wp_get_nav_menu_items ()

    Recupera todos los elementos del menú de un menú de navegación.

    wp-includes / nav-menu.php: wp_get_nav_menu_object ()

    Devuelve un objeto de menú de navegación.

    wp-includes / nav-menu.php: get_nav_menu_locations ()

    Recupera todas las ubicaciones de los menús de navegación registrados y los menús asignados a ellos.

    wp-includes / load.php: is_wp_error ()

    Comprueba si la variable dada es un error de WordPress.

    Usado por

    Usado por Descripción
    wp-includes / class-wp-personalizar-nav-menus.php: WP_Customize_Nav_Menus :: render_nav_menu_partial ()

    Renderice un menú específico a través de wp_nav_menu () usando los argumentos proporcionados.

    wp-includes / widgets / class-wp-nav-menu-widget.php: WP_Nav_Menu_Widget :: widget ()

    Genera el contenido de la instancia actual del widget del menú de navegación.

    Registro de cambios

    Versión Descripción
    5.5.0 Agregó el container_aria_label argumento.
    4.7.0 Agregó el item_spacing argumento.
    3.0.0 Introducido.