Documentazione per l'argomento "items_wrap" di wp_nav_menu?

5 giu 2011, 08:01:58
Visualizzazioni: 64.3K
Voti: 52

Sto utilizzando wp_nav_menu e sto cercando di creare un output personalizzato per i menu a discesa di livello secondario. Mi sono imbattuto nell'argomento "items_wrap" ma ci sono davvero poche informazioni su cosa sia, come funzioni e quali tipi di cose si possano fare con esso.

Cosa sono esattamente "%1$s" e "%2$s"? (Qualcuno può spiegarlo in termini semplici?)

0
Tutte le risposte alla domanda 2
5
70

Il parametro 'items_wrap' per wp_nav_menu() ha come valore predefinito:

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

Questo è un template che viene analizzato con sprintf():

$nav_menu .= sprintf( 
    $args->items_wrap
,   esc_attr( $wrap_id )    // %1$s
,   esc_attr( $wrap_class ) // %2$s
,   $items                  // %3$s
);

I segnaposto numerati – %1$s, %2$s, %3$s – si riferiscono agli argomenti dopo il primo argomento in sprintf(). Il segno percentuale indica un segnaposto, il numero la posizione e il tipo s significa che deve essere trattato come una stringa.
Non modificare il tipo a meno che tu non sappia davvero cosa stai facendo. :)

  • $wrap_id è il parametro 'menu_id' se è stato impostato, altrimenti è 'menu-' . $menu->slug.
  • $wrap_class è il parametro 'menu_class' se è stato impostato, altrimenti è vuoto.
  • $items è una stringa del contenuto interno del menu.

Supponiamo che non ti serva un class. Basta omettere la seconda stringa:

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

Se non ti servono né il class né l'id, e vuoi un altro contenitore (perché hai usato un custom walker):

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

Il punto principale è: Devi usare i numeri per i sostituti forniti in wp_nav_menu(). %3$s è sempre la lista degli elementi.

5 giu 2011 08:58:05
Commenti

Grazie per aver cercato di spiegare. Più o meno capisco, ma non funziona per me. Voglio aggiungere, per esempio, una classe ai miei elementi li. Sembra che tu stia usando ul per ogni elemento? Inoltre non vedo alcun sprintf nel mio codice, quindi non è chiaro.

landed landed
9 set 2016 15:31:04

@landed Questo è per l'intero menu, non per ogni singolo elemento. Per favore utilizza la nostra ricerca, abbiamo già soluzioni esistenti per il tuo problema.

fuxia fuxia
9 set 2016 16:27:01

Ho cercato sul web e altri avevano lo stesso problema. Ho dovuto estendere la classe walker e aggiungere il mio html lì. Questo ha funzionato per me, ma ho dovuto copiare molto codice dalla vecchia classe, rinominarlo e modificarlo, poi impostare il menu per usare la mia classe walker personalizzata. Grazie.

landed landed
10 set 2016 20:29:29

Potrei essere un po' in ritardo alla festa, ma se volessi introdurre del testo a items_wrap come potrei i18n-izzarlo?

henrywright henrywright
19 set 2016 15:42:44

@henrywright Traduci prima i valori, poi passali alla stringa.

fuxia fuxia
19 set 2016 15:59:53
0

da quello che ho capito, prende un output e assegna all'elemento li un id e una classe con il nome del menu. Quindi, quando vuoi stilizzare un menu specifico, puoi prendere il suo id e/o classe se desideri personalizzarlo. L'1 e il 2 sono semplicemente output diversi.

5 giu 2011 08:12:36