In wordpress custom themes sometimes we need to add extra classes or some extra functionality such as in submenu even odd class , or class according to depth . I came to know that these all things are easy with wordpress inbuilt class Walker_Nav_Menu class. You just need to extend this class into function.php and you can get what you want . Extend the class in your function.php like given below

class codingbin_Walker extends Walker_Nav_Menu
{
     // functioning


     // functioning
}

Now you can add function start_lvl a function to return the HTML for the start of a new level. In the case of lists, this would be the start of a new ‘sub-list’, and so would be responsible for returning the ul tag

function start_lvl( &$output, $depth = 0, $args = array() ) 
{
	// depth dependent classes
	$indent = ( $depth > 0  ? str_repeat( "\t", $depth ) : '' ); // code indent
	$display_depth = ( $depth + 1); // because it counts the first submenu as 0
	$classes = array(
	'nav-submenu',
	( $display_depth % 2  ? 'menu-odd' : 'menu-even' ),
	( $display_depth >=2 ? 'sub-sub-menu' : '' ),
	'menu-depth-' . $display_depth
	);
	$class_names = implode( ' ', $classes );

	// build html
	$output .= "\n" . $indent . '<ul class="' . $class_names . '">' . "\n";
}

start_el a function which display the current element in the menu . In the list menu this function will display the li items with the link to post/page or other stuff . so you can customize this function according to the elements requirement .

function start_el(  &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    global $wp_query;
    $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent
  
    // depth dependent classes
    $depth_classes = array(
        ( $depth == 0 ? 'nav-item' : 'nav-submenu-item' ),
        ( $depth >=2 ? 'sub-sub-menu-item' : '' ),
        ( $depth % 2 ? 'menu-item-odd' : 'menu-item-even' ),
        'menu-item-depth-' . $depth
    );
    $depth_class_names = esc_attr( implode( ' ', $depth_classes ) );
  
    // passed classes
    $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    $class_names = esc_attr( implode( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ) );
  
    // build html
    $output .= $indent . '<li id="nav-menu-item-'. $item->ID . '" class="' . $depth_class_names . ' ' . $class_names . '">';
  
    // link attributes
    $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        ) .'"' : '';
    $attributes .= ' class="menu-link ' . ( $depth > 0 ? 'sub-menu-link' : 'main-menu-link' ) . '"';
  
    $item_output = sprintf( '%1$s<a%2$s>%3$s%4$s%5$s</a>%6$s',
        $args->before,
        $attributes,
        $args->link_before,
        apply_filters( 'the_title', $item->title, $item->ID ),
        $args->link_after,
        $args->after
    );
  
    // build html
    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}

Now you can call this extended class in the menu call like

wp_nav_menu( array( 
		'theme_location' => 'primary', 
		'menu_class' => 'nav-list',
		'container'=>'ul',
		'walker'=> new codingbin_Walker
		) ); 
http://codingbin.com/wp-content/uploads/2015/10/wordpress-1024x341.jpghttp://codingbin.com/wp-content/uploads/2015/10/wordpress-150x150.jpgdevidcmsWordPresscustom wordpress menu,wordpress,wordpress menuIn wordpress custom themes sometimes we need to add extra classes or some extra functionality such as in submenu even odd class , or class according to depth . I came to know that these all things are easy with wordpress inbuilt class Walker_Nav_Menu class. You just need to...coding, php, wordpress, yii, cakephp, and  jquery

Are you want to get implementation help, or modify or extend the functionality of this script? Submit paid service request