Des docs pour l'argument «items_wrap» de wp_nav_menu?

42

J'utilise wp_nav_menu et j'essaie de créer une sortie personnalisée pour les menus déroulants de sous-niveau. Je suis tombé sur l'argument "items_wrap" mais il n'y a vraiment pas beaucoup d'informations sur ce que c'est, comment ça marche et quel genre de choses peuvent être faites avec.

Qu'est - ce exactement est " % 1 $ s " et " % 2 $ s "? (Quelqu'un peut-il l'expliquer en termes simples?)

RodeoRamsey
la source

Réponses:

57

Le paramètre 'items_wrap'par wp_nav_menu()défaut est:

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

Ce modèle aa est analysé avec sprintf():

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

Les espaces réservés numérotés - %1$s, %2$s, %3$s- se réfèrent aux arguments après le premier argument sprintf(). Le signe de pourcentage marque un espace réservé, le nombre la position et le type ssignifie qu'il doit être traité comme une chaîne.
Ne changez pas le type sauf si vous savez vraiment ce que vous faites. :)

  • $wrap_idest le paramètre 'menu_id'si vous l'avez défini, sinon il l'est 'menu-' . $menu->slug.
  • $wrap_classest le paramètre 'menu_class'si vous l'avez défini, sinon il est vide.
  • $items est une chaîne du contenu interne du menu.

Disons que vous n'avez pas besoin d'un class. Oubliez simplement la deuxième chaîne:

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

Si vous n'avez pas besoin de classet id, et que vous voulez un autre conteneur (car vous avez utilisé un lecteur personnalisé ):

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

Le point principal est: Vous devez utiliser les numéros pour les remplacements indiqués dans wp_nav_menu(). %3$sest toujours la liste des éléments.

fuxia
la source
Merci d'avoir essayé de vous expliquer. Je le vois un peu mais ça ne marche pas pour moi. Je veux ajouter dire une classe à mes articles li. Vous semblez utiliser ul pour chaque article? Je ne vois pas non plus de sprintf dans mon code, donc ce n'est pas clair.
atterri le
1
@landed C'est pour tout le menu , pas pour chaque élément. S'il vous plaît utiliser notre recherche, nous avons des solutions existantes pour votre problème.
fuxia
J'ai fait des recherches sur le Web et d'autres personnes avaient le même problème. J'avais besoin d'étendre la classe de marcheur et d'ajouter mon code html. Cela fonctionnait bien pour moi, mais je devais copier beaucoup de code de l'ancienne classe, le renommer et le modifier, puis le définir. le menu pour utiliser ma classe de marcheur personnalisée. Merci
atterri
Je suis peut-être un peu en retard à la fête, mais si vous vouliez introduire un texte, items_wrapcomment vous y prendriez-vous?
henrywright
@henrywright Traduisez d'abord les valeurs, puis transmettez-les à la chaîne.
fuxia
0

D'après ce que je comprends, il saisit une sortie et donne au li un identifiant et une classe avec le nom du menu. Ainsi, lorsque vous souhaitez attribuer un style à un menu particulier, vous devez saisir son identifiant et / ou votre classe si vous souhaitez le personnaliser. le 1 et 2 est juste une sortie différente.

xLRDxREVENGEx
la source