3

I am adding a specific class on my wp_nav_menu link via function.php but I am not able to target a specific menu: This is what I got which targets all wp_menu_nav on my page:

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

I tried also using the following with no luck

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 );
6

I tried the below code and it worked.

Add this to your functions.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);

At last you must select the option "Menu1" for the specific menu on which you have to add the anchor custom classes from dashboard Apperance->menus. (select menu2 or menu3 for other menus whose anchor links does not need the custom-class)

To add "active class" to the first menu item of the particular menu then try this one:

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);

If the active class must be added to the first menu item of all menus then use this:

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);
  • I am trying to add a custom class to each LINK in a spacific menu tho. See the code on my question – rob.m Oct 6 '14 at 8:10
  • ya..okay.. i gave the code to find the specific menu. means instead of $args->theme_location please use get_nav_menu_locations . – Zammuuz Oct 6 '14 at 8:13
  • gives this result when doing as you suggest pastebin.com/J1fXd6yQ – rob.m Oct 6 '14 at 8:21
  • 1
    @rob.m : i have edited my answer please check it – Zammuuz Oct 6 '14 at 9:30
  • what if I wanted to add also a class "active" to the first LINK item only? – rob.m Oct 6 '14 at 10:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.