¿Algún documento para el argumento "items_wrap" de wp_nav_menu?

42

Estoy usando wp_nav_menu y estoy tratando de crear una salida personalizada para los menús desplegables de subnivel. Me encontré con el argumento "items_wrap", pero en realidad no hay mucha información sobre qué es, cómo funciona y qué tipo de cosas se pueden hacer con él.

¿Qué es exactamente " % 1 $ s " y " % 2 $ s "? (¿Alguien puede explicarlo en términos simples?)

RodeoRamsey
fuente

Respuestas:

57

El parámetro 'items_wrap'por wp_nav_menu()defecto es:

'<ul id="%1$s" class="%2$s">%3$s</ul>' 

Esta 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 numeradas - %1$s, %2$s, %3$s- se refieren a los argumentos después de que el primer argumento en sprintf(). El signo de porcentaje marca un marcador de posición, el número, la posición y el tipo ssignifica que debe tratarse como una cadena.
No cambie el tipo a menos que realmente sepa lo que hace. :)

  • $wrap_ides el parámetro 'menu_id'si lo tiene configurado, de lo contrario lo es 'menu-' . $menu->slug.
  • $wrap_classes el parámetro 'menu_class'si lo tiene configurado, de lo contrario está vacío.
  • $items es una cadena del contenido interno del menú.

Digamos que no necesitas un class. Simplemente omita la segunda cadena:

wp_nav_menu( array( 'items_wrap' => '<ul id="%1$s">%3$s</ul>' ) );

Si no necesita el classy el id, y desea otro contenedor (porque usó un andador personalizado ):

wp_nav_menu( array( 'items_wrap' => '<div>%3$s</div>' ) );

El punto principal es: debe usar los números para los reemplazos dados en wp_nav_menu(). %3$sEs siempre la lista de artículos.

fuxia
fuente
Gracias por intentar explicarlo. Más o menos lo veo, pero no me está funcionando. Quiero agregar decir una clase a mis elementos li. ¿Parece que estás usando ul para cada artículo? No veo ningún sprintf en mi código tampoco, así que no está claro.
aterrizó el
1
@landed Esto es para todo el menú , no para cada elemento. Utilice nuestra búsqueda, tenemos soluciones existentes para su problema.
fuxia
Realicé búsquedas en la web y otros tuvieron el mismo problema que necesitaba para extender la clase walker y agregar mi html allí, esto funcionó bien para mí, pero tuve que copiar bastante código de la clase anterior, cambiarle el nombre y cambiarlo, luego establecer el menú para usar mi clase de caminante personalizada. Gracias
aterrizó el
Puede que llegue un poco tarde a la fiesta, pero si quisieras introducir un texto sobre items_wrapcómo lo harías.
henrywright
@henrywright Traduce los valores primero, luego los pasa a la cadena.
fuxia
0

de lo que deduzco, toma una salida y le da al li una identificación y clase con el nombre del menú. Entonces, cuando desee diseñar un menú en particular, tome su id y / o clase si desea diseñarlo. el 1 y 2 es solo una salida diferente.

xLRDxREVENGEx
fuente