¿Hay documentación para el argumento "items_wrap" de wp_nav_menu?
Estoy usando wp_nav_menu e intento crear una salida personalizada para los menús desplegables de subnivel. Me encontré con el argumento "items_wrap" pero realmente no hay mucha información sobre qué es, cómo funciona y qué tipo de cosas se pueden hacer con él.
¿Qué son exactamente "%1$s" y "%2$s"? (¿Alguien puede explicarlo en términos simples?)

El parámetro 'items_wrap'
para wp_nav_menu()
tiene como valor predeterminado:
'<ul id="%1$s" class="%2$s">%3$s</ul>'
Este es una plantilla que se analiza con sprintf()
:
$nav_menu .= sprintf(
$args->items_wrap
, esc_attr( $wrap_id ) // %1$s
, esc_attr( $wrap_class ) // %2$s
, $items // %3$s
);
Los marcadores de posición numerados – %1$s
, %2$s
, %3$s
– se refieren a los argumentos después del primer argumento en sprintf()
. El signo de porcentaje marca un marcador de posición, el número la posición y el tipo s
significa que debe tratarse como una cadena.
No cambies el tipo a menos que realmente sepas lo que estás haciendo. :)
$wrap_id
es el parámetro'menu_id'
si lo has establecido, de lo contrario es'menu-' . $menu->slug
.$wrap_class
es el parámetro'menu_class'
si lo has establecido, de lo contrario está vacío.$items
es una cadena del contenido interno del menú.
Digamos que no necesitas un class
. Simplemente omite la segunda cadena:
wp_nav_menu( array( 'items_wrap' => '<ul id="%1$s">%3$s</ul>' ) );
Si no necesitas el class
ni el id
, y quieres otro contenedor (porque usaste un walker personalizado):
wp_nav_menu( array( 'items_wrap' => '<div>%3$s</div>' ) );
El punto principal es: Debes usar los números para los reemplazos dados en wp_nav_menu()
. %3$s
siempre es la lista de elementos.

Gracias por intentar explicarlo. Más o menos lo entiendo pero no me funciona. Quiero añadir digamos una clase a mis elementos li. Parece que estás usando ul para cada elemento? Tampoco veo ningún sprintf en mi código así que no está claro.

@landed Esto es para todo el menú, no para cada elemento. Por favor usa nuestro buscador, ya tenemos soluciones existentes para tu problema.

Busqué en la web y otros tenían el mismo problema, necesité extender la clase walker y añadir mi html ahí, esto funcionó bien para mi pero tuve que copiar bastante código de la clase antigua y renombrarlo y cambiarlo, luego configurar el menú para usar mi clase walker personalizada. Gracias

Puede que llegue un poco tarde a la fiesta, pero si quisieras introducir texto en items_wrap
, ¿cómo lo internacionalizarías (i18n)?

Por lo que entiendo, toma una salida y le asigna al elemento li un id y una clase con el nombre del menú. Así que cuando quieres dar estilo a un menú en particular, tomas su id y/o clase si deseas estilizarlo. El 1 y 2 simplemente son diferentes formatos de salida.
