Există documentație pentru argumentul "items_wrap" din wp_nav_menu?

5 iun. 2011, 08:01:58
Vizualizări: 64.3K
Voturi: 52

Folosesc wp_nav_menu și încerc să creez un output personalizat pentru submeniurile dropdown. Am dat peste argumentul "items_wrap" dar nu există prea multe informații despre ce este, cum funcționează și ce fel de lucruri se pot face cu el.

Ce sunt exact "%1$s" și "%2$s"? (Poate cineva să explice în termeni simpli?)

0
Toate răspunsurile la întrebare 2
5
70

Parametrul 'items_wrap' pentru wp_nav_menu() are valoarea implicită:

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

Acesta este un șablon care este analizat cu ajutorul funcției sprintf():

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

Plasătoarele numerotate – %1$s, %2$s, %3$s – se referă la argumentele de după primul argument din sprintf(). Semnul procent marchează o plasătoare, numărul indică poziția, iar tipul s înseamnă că ar trebui tratat ca un șir de caractere.
Nu schimbați tipul decât dacă știți cu adevărat ce faceți. :)

  • $wrap_id este parametrul 'menu_id' dacă este setat, altfel este 'menu-' . $menu->slug.
  • $wrap_class este parametrul 'menu_class' dacă este setat, altfel este gol.
  • $items este un șir de caractere care reprezintă conținutul interior al meniului.

Să presupunem că nu aveți nevoie de un class. Pur și simplu omiteți al doilea șir:

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

Dacă nu aveți nevoie nici de class, nici de id, și doriți un alt container (pentru că ați folosit un walker personalizat):

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

Ideea principală este: Trebuie să folosiți numerele pentru înlocuiri date în wp_nav_menu(). %3$s reprezintă întotdeauna lista de elemente.

5 iun. 2011 08:58:05
Comentarii

Mulțumesc pentru încercarea de a explica. Înțeleg parțial, dar nu funcționează pentru mine. Vreau să adaug, să zicem, o clasă la elementele mele li. Tu pare că folosești ul pentru fiecare element? Nu văd niciun sprintf în codul meu, așa că nu este clar.

landed landed
9 sept. 2016 15:31:04

@landed Aceasta este pentru întregul meniu, nu pentru fiecare element. Te rugăm să folosești căutarea noastră, avem soluții existente pentru problema ta.

fuxia fuxia
9 sept. 2016 16:27:01

Am căutat pe internet și alții au avut aceeași problemă. A trebuit să extind clasa walker și să adaug HTML-ul meu acolo. Această abordare a funcționat pentru mine, dar a trebuit să copiez destul de mult cod din vechea clasă, să-l redenumesc și să-l modific, apoi să setez meniul să folosească clasa mea walker personalizată. Mulțumesc.

landed landed
10 sept. 2016 20:29:29

S-ar putea să fiu puțin în urmă, dar dacă ai vrut să introduci text în items_wrap, cum l-ai internaționaliza (i18n)?

henrywright henrywright
19 sept. 2016 15:42:44

@henrywright Mai întâi traduce valorile, apoi le transmiți șirului.

fuxia fuxia
19 sept. 2016 15:59:53
0

din câte am înțeles, acesta preia un output și atribuie elementului li un id și o clasă cu numele meniului. Astfel, când dorești să stilizezi un anumit meniu, poți să-l selectezi prin id sau clasă dacă vrei să îi aplici stil. Diferența dintre 1 și 2 este doar o ieșire diferită.

5 iun. 2011 08:12:36