'', 'menu_class' => 'menu', 'format' => 'div', 'echo' => true,
'fallback_cb' => 'wp_page_menu', 'link_before' => '', 'link_after' => '', 'before_link' => '', 'after_link' => '', );
$args = wp_parse_args( $args, $defaults );
$args = apply_filters( 'wp_nav_menu_args', $args );
$args = (object) $args;
// Get the nav menu
$menu = wp_get_nav_menu_object( $args->menu );
// If we couldn't find a menu based off the name, id or slug,
// get the first menu that has items.
if ( !$menu ) {
$menus = wp_get_nav_menus();
foreach ( $menus as $menu_maybe ) {
if ( wp_get_nav_menu_items($menu_maybe->term_id) ) {
$menu = $menu_maybe;
break;
}
}
}
$args->menu = $menu->term_id;
$nav_menu = '';
if ( 'div' == $args->format )
$nav_menu .= '
';
$nav_menu = apply_filters( 'wp_nav_menu', $nav_menu );
return $args->echo ? print $nav_menu : $nav_menu;
}
/**
* Returns a Navigation Menu.
*
* See wp_nav_menu() for args.
*
* @since 3.0.0
*
* @param array $args Arguments
* @return mixed $output False if menu doesn't exists, else, returns the menu.
**/
function wp_get_nav_menu( $args = array() ) {
$defaults = array( 'menu' => '', 'menu_class' => 'menu', 'ul_class' => '', 'format' => 'div', 'type' => 'frontend',
'fallback_cb' => '', 'link_before' => '', 'link_after' => '', 'before_link' => '', 'after_link' => '', );
$args = wp_parse_args( $args, $defaults );
$args = apply_filters( 'wp_get_nav_menu_args', $args );
$args = (object) $args;
$menu = wp_get_nav_menu_object( $args->menu );
// If no menu was found, call the fallback_cb
if ( !$menu || is_wp_error($menu) ) {
if ( function_exists($args->fallback_cb) )
return call_user_func( $args->fallback_cb, $args );
}
$menu_items = wp_get_nav_menu_items( $menu->term_id );
$nav_menu = '';
$parent_stack = array();
$current_parent = 0;
$parent_menu_order = array();
// Setup parentage
foreach ( $menu_items as $menu_item )
$parent_menu_order[ $menu_item->ID ] = $menu_item->menu_order;
$ul_class = isset($args->ul_class) ? ' class="'. $args->ul_class .'"' : '';
$nav_menu .= '';
// Display Loop
foreach ( $menu_items as $key => $menu_item ) :
// Setup the $menu_item variables
$menu_item = wp_setup_nav_menu_item( $menu_item );
$maybe_value = 'frontend' == $args->type ? '' : ' value="'. $menu_item->ID .'"';
$classes = 'frontend' == $args->type ? 'class="menu-item-'. $menu_item->type . $menu_item->li_class .'"' : '';
$nav_menu .= '';
while ( !empty( $parent_stack ) && ($last_item || $menu_items[ $key + 1 ]->post_parent != $current_parent ) ) {
$nav_menu .= '
';
$current_parent = array_pop( $parent_stack );
}
} else {
array_push( $parent_stack, $current_parent );
$current_parent = $menu_item->ID;
$nav_menu .= '';
}
} else {
$nav_menu .= '';
}
endforeach;
$nav_menu .= '
';
return apply_filters( 'wp_get_nav_menu', $nav_menu );
}
/**
* Returns a menu item.
*
* @since 3.0.0
*
* @param object $menu_item The menu item
* @param string $context frontend|backend|default
* @param array $args See wp_get_nav_menu().
**/
function wp_get_nav_menu_item( $menu_item, $context, $args = array() ) {
$item = '';
switch ( $context ) {
case 'frontend':
$attr_title = ( isset($menu_item->anchor_title) && '' != $menu_item->anchor_title ) ? ' title="'. esc_attr($menu_item->anchor_title) .'"' : '';
$href = isset($menu_item->link) ? ' href="'. esc_url($menu_item->link) .'"' : '';
$item .= 'target .'>';
$item .= $args->before_link . esc_html( $menu_item->title ) . $args->after_link;
$item .= '';
break;
case 'backend':
$item .= '- ';
$item .= ''. esc_html($menu_item->title) .'';
$item .= '';
$item .= ''. esc_html($menu_item->type) .'';
// Actions
$item .= ' | ';
$item .= '';
$item .= '
';
// Menu Item Settings
$item .= '';
$item .= '';
$item .= '';
$item .= '';
$item .= '';
$item .= '';
$item .= '';
$item .= '';
$item .= '';
$item .= '';
break;
case 'default':
$menu_id = 'menu-item-' . $menu_item->ID;
$item .= '';
// Menu Item Settings
$item .= '';
$item .= '';
$item .= '';
$item .= '';
$item .= '';
$item .= '';
break;
}
return apply_filters( 'wp_get_nav_menu_item', $item );
}
?>