Return to Snippet

Revision: 50943
at September 9, 2011 20:08 by Huskie


Updated Code
/*-----------------------------------------------------------
	Custom Walker Function that only shows an active class 
	and unique ID for each menu item, stripping out all the
	unnecessary classes and ID's. Nice!
-----------------------------------------------------------*/

class Sleek_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;
        $current_indicators = array('current-menu-item','current-menu-parent','current_page_item','current_page_parent');
		$newClasses = array();
		foreach($classes as $el)
		{
			if(in_array($el,$current_indicators))
			{ 
				array_push($newClasses,$el);
			}
		}
		$class_names = join(' ',apply_filters('nav_menu_css_class',array_filter($newClasses),$item));
        if($class_names != '') $class_names = ' class="active"';
        $itemID = strtolower($item->title);
		$menu_name = sleek_get_theme_menu_name('footer-menu');
        $output .= $indent . '<li id="' . $menu_name . '-' . $itemID . '"' . $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) .'"' : '';

        if($depth != 0)
        {
        	//children stuff, maybe you'd like to store the submenu's somewhere?
        }

        $item_output = $args->before;
        $item_output .= '<a'. $attributes .'>';
        $item_output .= $args->link_before .apply_filters('the_title',$item->title, $item->ID);
        $item_output .= '</a>';
        $item_output .= $args->after;

        $output .= apply_filters('walker_nav_menu_start_el',$item_output,$item,$depth,$args);
 	}
}

Revision: 50942
at September 9, 2011 19:05 by Huskie


Initial Code
/*-----------------------------------------------------------
	Custom Walker Function that only shows an active class 
	and unique ID for each menu item, stripping out all the
	unnecessary classes and ID's. Nice!
-----------------------------------------------------------*/

class WPSleek_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;
        $current_indicators = array('current-menu-item','current-menu-parent','current_page_item','current_page_parent');
		$newClasses = array();
		foreach($classes as $el)
		{
			if(in_array($el,$current_indicators))
			{ 
				array_push($newClasses,$el);
			}
		}
		$class_names = join(' ',apply_filters('nav_menu_css_class',array_filter($newClasses),$item));
        if($class_names != '') $class_names = ' class="active"';
        $itemID = strtolower($item->title);
        $output .= $indent . '<li id="' . $itemID . '"' . $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) .'"' : '';

        if($depth != 0)
        {
        	//children stuff, maybe you'd like to store the submenu's somewhere?
        }

        $item_output = $args->before;
        $item_output .= '<a'. $attributes .'>';
        $item_output .= $args->link_before .apply_filters('the_title',$item->title, $item->ID);
        $item_output .= '</a>';
        $item_output .= $args->after;

        $output .= apply_filters('walker_nav_menu_start_el',$item_output,$item,$depth,$args);
 	}
}

Initial URL
http://darrenhuskie.com/

Initial Description
Could possibly be simplified to maximise efficiency. It relies on a separare WP Sleek framework function sleek_get_theme_menu_name. This could ideally be improved to allow the theme location to passed as a parameter somehow.

Initial Title
WordPress Custom Walker Class to remove unnecessary classes and ID\'s from menu items

Initial Tags
class, wordpress

Initial Language
PHP