¿Cómo dirigir wp_nav_menu específico en función?

2

Estoy agregando una clase específica en mi enlace wp_nav_menu a través de function.php, pero no puedo apuntar a un menú específico: esto es lo que obtuve a todos los wp_menu_nav en mi página:

function add_menuclass_active($ulclass) {
 return preg_replace('/<a /', '<a class="list-group"', $ulclass, 1);
  }
 add_filter('wp_nav_menu', 'add_menuclass_active');

Intenté usar lo siguiente sin suerte

function add_menuclass_active( $nav_menu, $args ) {
if( $args->theme_location == 'CUSTOM MENU' )
    return preg_replace( '/<a /', '<a class="list-group"', $nav_menu, 1 );
    return $nav_menu;
}
add_filter( 'wp_nav_menu', 'add_menuclass_active', 10, 2 );
    
pregunta rob.m 06.10.2014 - 09:38

1 respuesta

5

Probé el siguiente código y funcionó.

agrega esto a tus funciones.php

register_nav_menus(array(
'top-menu' => __('Menu1', 'twentyfourteen'),
'side-menu' => __('Menu2', 'twentyfourteen'),
'footer-menu' => __('Menu3', 'twentyfourteen')
)
);

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $menu_locations = get_nav_menu_locations();

    if ( has_term($menu_locations['top-menu'], 'nav_menu', $item) ) {
       $item_output = preg_replace('/<a /', '<a class="list-group" ', $item_output, 1);
    }

    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);

por último, debe seleccionar la opción "Menú1" para el menú específico en el que tiene que agregar las clases personalizadas de anclaje desde los menús Apperance- > [seleccione menu2 o menu3 para otros menús cuyos enlaces de anclaje no necesitan la clase personalizada]

Para agregar "clase activa" al primer elemento del menú del menú en particular, intente este:

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $menu_locations = get_nav_menu_locations();


    if ( has_term($menu_locations['top-menu'], 'nav_menu', $item) ) {
       $item_output = preg_replace('/<a /', '<a class="list-group" ', $item_output, 1);
if ($item->menu_order == 1){
 $item_output = preg_replace('/<a /', '<a class="list-group active" ', $item_output, 1);
}
    }

    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);

si la clase activa se debe agregar al primer elemento del menú de todos los menús, use esto:

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $menu_locations = get_nav_menu_locations();


    if ( has_term($menu_locations['top-menu'], 'nav_menu', $item) ) {
       $item_output = preg_replace('/<a /', '<a class="list-group" ', $item_output, 1);
    }
 if ($item->menu_order == 1){
 $item_output = preg_replace('/<a /', '<a class="active" ', $item_output, 1);
}
    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);
    
respondido por el Zammuuz 06.10.2014 - 10:06

Lea otras preguntas en las etiquetas