I have designed a custom menu and would like to be able to style the individual li dependent whether it is the current page or not? I believe this is normally pretty straightforward using a class such as current-menu-item. I however am also using a walker in my nav to show an extra description field – this appears to disable it, can anyone please help??
<div id="navigation">
<?php
$walker = new My_Walker;
wp_nav_menu(array( 'menu' => 'nav','walker' => $walker ) );
?>
</div><!-- END navigation -->
UPDATE:
class My_Walker extends Walker_Nav_Menu
{
function start_el(&$output, $item, $depth, $args) {
global $wp_query;
$indent = ( $depth ) ? str_repeat( "t", $depth ) : '';
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
$class_names = '';
$output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';
$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
$item_output = $args->before;
$item_output .= '<a'. $attributes .'>';
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
$item_output .= '<span>' . $item->description . '</span>';
$item_output .= '</a>';
$item_output .= $args->after;
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
}
A belated answer but figured I’d contribute as this page was near the top of Google when searching for a solution to this issue. I too had overlooked the fact that WP adds the current page menu item by default (thanks patnz for pointing that out).
However I’m not happy with how bloated the markup is when including the default classes so for anyone else interested you could instead use a line of code similar to the following:
For completeness – here is how it would look in your code example:
You’re unsetting the default class names so they’re not being added.
Try this: