Există documentație pentru argumentul "items_wrap" din wp_nav_menu?
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?)
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.

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 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.

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.

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)?

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ă.
