Alguma documentação para o argumento "items_wrap" de wp_nav_menu?

42

Estou usando o wp_nav_menu e estou tentando criar uma saída personalizada para os menus suspensos do subnível. Me deparei com o argumento "items_wrap", mas não há realmente muita informação sobre o que é, como funciona e que tipo de coisas podem ser feitas com ele.

O que exatamente são " % 1 $ s " e " % 2 $ s "? (Alguém pode explicar isso em termos leigos?)

RodeoRamsey
fonte

Respostas:

57

O parâmetro 'items_wrap'para o wp_nav_menu()padrão é:

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

Este modelo aa que é analisado com sprintf():

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

Os espaços reservados numeradas - %1$s, %2$s, %3$s- referem-se aos argumentos após o primeiro argumento no sprintf(). O sinal de porcentagem marca um espaço reservado, o número, a posição e o tipo ssignifica que ele deve ser tratado como uma sequência.
Não altere o tipo, a menos que você realmente saiba o que faz. :)

  • $wrap_idé o parâmetro 'menu_id'se você o tiver definido, caso contrário, ele é 'menu-' . $menu->slug.
  • $wrap_classé o parâmetro 'menu_class'se você o tiver definido, caso contrário, ele está vazio.
  • $items é uma sequência do conteúdo interno do menu.

Digamos que você não precise de um class. Apenas omita a segunda string:

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

Se você não precisa do classe do ide deseja outro contêiner (porque usou um andador personalizado ):

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

O ponto principal é: Você deve usar os números para as substituições fornecidas em wp_nav_menu(). %3$sé sempre a lista de itens.

fuxia
fonte
Obrigado por tentar explicar. Eu meio que vejo, mas não está funcionando para mim. Quero adicionar uma classe aos meus itens de li. Você parece estar usando ul para cada item? Também não vejo sprintf no meu código, portanto não está claro.
desembarcou
1
@landed É para todo o menu , não para cada item. Por favor, use nossa pesquisa, temos soluções existentes para o seu problema.
fuxia
Eu pesquisei na web e outros tiveram o mesmo problema que eu precisava para estender a classe walker e adicionar meu html lá, isso funcionou bem para mim, mas eu tive que copiar bastante código da classe antiga e renomeá-lo e alterá-lo e, em seguida, definir o menu para usar minha classe de caminhante personalizada. Obrigado
desembarcou
Talvez eu esteja um pouco atrasado para a festa, mas se você quiser apresentar um texto de items_wrapcomo você o encontrará?
Henrywright 19/09/16
@henrywright Traduza os valores primeiro e passe-os para a string.
fuxia
0

pelo que eu recolho, pega uma saída e fornece ao li um id e uma classe com o nome dos menus. Portanto, quando você deseja criar um menu específico, escolha seu ID e / ou classe, se quiser estilizá-lo. o 1 e o 2 são apenas uma saída diferente.

xLRDxREVENGEx
fonte