$location, 'container' => 'div', 'container_id' => 'phone-menu', 'container_class' => $container_class.' nav click-toggle phone-menu', 'menu_class' => 'top-lvl', 'depth' => 0, //All them levels 'echo' => false ); $extra_attrs = array( 'data-sirconClickToggleMenu'=>1, 'aria-hidden' => 'true' ); $args['before_menu'] = ''; $args['walker'] = new ClickToggle(); sircontheme_output_prepared_menu($args, $extra_attrs); } function sircontheme_nav_menu($location, $container_class = 'default'){ $args = array( 'theme_location' => $location, 'container' => 'nav', 'container_id' => $location, 'container_class' => $container_class.' nav click-toggle', 'menu_class' => 'top-lvl', 'depth' => 0, //All them levels 'echo' => false ); $extra_attrs = array( 'role' => 'navigation', 'data-sirconClickToggleMenu' => 1 ); $args['walker'] = new ClickToggle(); sircontheme_output_prepared_menu($args, $extra_attrs); } /* Make a new menu location available */ function register_sircontheme_nav_menu($location, $description = 'No description'){ register_nav_menus(array($location => $description)); } /* HELPER FUNCTION FOR THOSE ABOVE */ function sircontheme_output_prepared_menu($args, $extra_attrs = array()){ $arr_attrs = array(); foreach($extra_attrs as $k=>$v){ $arr_attrs[] = $k.'="'.$v.'"'; } $attrs = implode(' ',$arr_attrs); //We want to manually control the outer container $container = $args['container']; $args['container'] = false; $container_id = $args['container_id'] ? ' id="'.$args['container_id'].'"' : ''; unset($args['container_id']); $container_class = $args['container_class'] ? ' class="'.$args['container_class'].'"' : ''; unset($args['container_class']); //Extra output before/after? $before_menu = isset($args['before_menu']) ? $args['before_menu'] : ''; unset($args['before_menu']); $after_menu = isset($args['after_menu']) ? $args['after_menu'] : ''; unset($args['before_menu']); //Default menu id $args['menu_id'] = $args['theme_location'].'-items'; //Get wp-menu $menu_output = wp_nav_menu($args); //Fix a weird extra space $menu_output = str_replace('> <', '><', $menu_output); //Now output the thing echo '<'.$container.' '.$attrs.$container_id.$container_class.'>'; echo $before_menu; echo $menu_output; echo $after_menu; echo ''; } class ClickToggle extends Walker_Nav_Menu { /** * At the start of each element, output a
  • and tag structure. */ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { $classes = apply_filters('nav_menu_css_class', $item->classes, $item); $classes = $classes ? ' class="'.implode(' ', $classes).'"' : ''; $output .= ''; if(!$item->title){return;} if(!$item->url || $item->url === '#'){ $output .= ''.$item->title.''; }else{ if($item->target){ $target = ' target="'.$item->target.'"'; }else{$target = '';} $output .= ''.$item->title.''; } } function end_el(&$output, $object, $depth = 0, $args = array()){ $output .= '
  • '; } function start_lvl(&$output, $depth = 0, $args = array()){ $ul_class = ($depth === -1) ? 'top-lvl' : 'submenu'; $output .= ''; } } ?>