Adicionando classes diferentes para ancorar no menu de navegação

2

Isso é possível?

Eu quero adicionar classes diferentes às âncoras, então não é o mesmo em todas as âncoras. Como posso fazer isso?

PS: estou usando isso:

function add_nav_class($output) {
    $output= preg_replace('/<a/', '<a class="your-class"', $output, 1);
    return $output;
}
add_filter('wp_nav_menu', 'add_nav_class');

Mas eu quero adicionar classes diferentes aos links ...

Então, assim:

<li><a class="1></a></li>
<li><a class="2></a></li>

e assim por diante ...

    
por Johan 28.07.2013 / 12:27

2 respostas

2

Sim, é possível.

Você pode conseguir isso usando o filtro wp_nav_menu_objects .

function my_wp_nav_menu_objects($objects, $args) {
    foreach($objects as $key => $item) {
        $objects[$key]->classes[] = 'my-class';
    }
    return $objects;
}
add_filter('wp_nav_menu_objects', 'my_wp_nav_menu_objects', 10, 2);

O único problema é que essas classes serão adicionadas aos elementos li e não aos links diretamente. Mas é o comportamento padrão do WordPress e não acho que você deva alterá-lo.

Se você realmente precisar alterá-lo, ainda é possível:

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    // you can put your if statements in here (use item, depth and args in conditions)
    if ( $depth == 1 ) {
        $item_output = preg_replace('/<a /', '<a class="level-1-menu" ', $item_output, 1);
    } else if ( $depth == 2 )
        $item_output = preg_replace('/<a /', '<a class="level-2-menu" ', $item_output, 1);
    }
    // .. and so on
    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);
    
por Krzysiek Dróżdż 29.07.2013 / 11:04
5

você pode seguir os passos abaixo:

Passo 1: No wp-admin, vá para Aparência - > Menus, coloque a classe no item de menu aqui "Classes CSS (opcional)". Se você não pode ver as "Classes CSS (opcional)" no item de menu, então há "Opção de tela" no topo direito da tela e existem as opções "Classe CSS" em "Mostrar propriedades avançadas do menu".

Passo 2: Em sua pasta / function.php, adicione o código abaixo:

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $classes     = implode(' ', $item->classes);
    $item_output = preg_replace('/<a /', '<a class="'.$classes.'"', $item_output, 1);
    return $item_output;
 }
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);

Espero que o código acima funcione para você, deixe-me saber se ainda assim não funciona.

    
por Hardy Mathew 30.03.2015 / 00:29