wp_nav_menu (), como alterar a classe <li>?


16

Estou criando um menu para o meu site. A estática está assim:

<nav>
  <ul id="menu">
        <li class="item_1"><a href="#">Item 1</a></li>
        <li class="item_2"><a href="#">Item 2</a></li>
        <li class="item_3"><a href="#">Item 3</a></li>
        <li class="item_4"><a href="#">Item 4</a></li>
        <li class="item_5"><a href="#">Item 5</a></li>
        <li class="item_6"><a href="#">Item 6</a></li>
        <li class="item_7"><a href="#">Item 7</a></li>
        <li class="item_8"><a href="#">Item 8</a></li>
    </ul>

Consegui entender como personalizar a <ul>tag e me livrar da <div>tag automática . Mas agora, quero personalizar a <li>tag para poder atribuir um classnome diferente para controlar o comportamento específico por meio do CSS. Quando eu uso a wp_nav_menu()saída é a seguinte:

    <ul id="menu">
<li id="menu-item-111" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-111"><a href="http://mydomain.com/dummy/fashion/">Fashion</a></li>
    <li id="menu-item-112" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-112"><a href="http://mydomain.comdummy/documentary/">Documentary</a></li>
    <li id="menu-item-113" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-113"><a href="http://mydomain.com/dummy/events/">Events</a></li>
    <li id="menu-item-114" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-114"><a href="http://mydomain.com/dummy/portraits/">Portraits</a></li>
    </ul>

Eu quero me livrar do idnas <li>tags e mudar o classpara refletir o nome da página que deseja vincular. Basicamente, quero exibir a mesma coisa que o primeiro trecho de código neste post.

A razão pela qual eu faço isso é que eu uso imagens personalizadas que são controladas pelo meu CSS em vez de texto sem formatação.

Isso é possível? Que estratégia devo usar para superar esse problema?


Aqui você pode adicionar classe diferente em ul> li> a sdtuts.com/wordpress-add-custom-class-in-wp_nav_menu-links
Rameez Soomro

Respostas:


14

Use um andador personalizado , remova o que você não precisa e adicione suas aulas. Aqui está um caminhante que eu uso para obter uma lista com marcação limpa: T5_Nav_Menu_Walker_Simple .

Você também pode filtrar 'nav_menu_css_class'ou 'wp_nav_menu_items'. Mas uma classe de caminhantes é mais fácil de entender e controlar na minha opinião.


Obrigado Toscho, acabo de descobrir que, na nova versão do Wordpress (3.3), podemos adicionar classes personalizadas aos itens de menu que resolvem meu problema. Eu tentei o script que você me sugeriu (T5_Nav_Menu_Walker_Simple) que tira tudo do <li>, como podemos controlar quais elementos queremos manter?
Christian

1
@ Christian Você pode mudar o andador conforme necessário, é apenas um exemplo muito básico. Para ver quais informações estão disponíveis, adicione um print_r( $item, TRUE )a cada li. Então decida o que fazer com isso. :)
fuxia

Isso me indicou a direção certa, o que eu precisava era o wp_nav_menu , mas precisava alterar o parâmetro 'container_class', para trabalhar no meu caso de uso específico, onde, em alguma condição, troquei o menu principal por outro, mas precisava do classes sejam consistentes para css.
D. Dan

10

vá para aparência> menus - selecione o menu desejado - vá para "opções de tela" no canto superior direito, selecione "classes css" - adicione uma classe a cada item de menu.


1

Configurando a <li>classe para nav-link, como o bootstrap 4.3 precisa:

function add_menu_link_class($atts, $item, $args)
{
    $atts['class'] = 'nav-link';
    return $atts;
}
add_filter('nav_menu_link_attributes', 'add_menu_link_class', 1, 3);

Você também pode desconfigurar o idatributo nessa matriz.


0

Como o último pôster mencionado, você pode adicionar suas próprias classes através de menus de aparência> com classes CSS marcadas nas opções da tela. No caminhante, você pode acessar o que entra lá via:

$item_output .= '<a'. $attributes .' class="'. $item->classes[0].'">';

Eu até usei isso para adicionar imagens pré-nomeadas no menu - um pouco de flakey, mas funciona.

<img src="theme/images/navigation/'.$item->classes[0].'" width="48" height="48">
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.