'', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before_link' => '', 'after_link' => '', 'before_title' => '', 'after_title' => '', ); $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; } } } if ( !is_wp_error($menu) ) $args->menu = $menu->term_id; $nav_menu = ''; if ( 'div' == $args->container ) { $class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ''; if ( is_nav_menu($menu) ) { $nav_menu .= ''; $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args ); if ( $args->echo ) echo $nav_menu; else return $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', 'context' => 'frontend', 'fallback_cb' => '', 'before_link' => '', 'after_link' => '', 'before_title' => '', 'after_title' => '', ); $args = wp_parse_args( $args, $defaults ); $args = apply_filters( 'wp_get_nav_menu_args', $args ); $args = (object) $args; // Variable setup $nav_menu = ''; $items = ''; $current_parent = 0; $parent_stack = array(); $parent_menu_order = array(); // Get the menu object $menu = wp_get_nav_menu_object( $args->menu ); // If the menu exists, get it's items. if ( $menu && !is_wp_error($menu) ) $menu_items = wp_get_nav_menu_items( $menu->term_id, 'backend' ); // If no menu was found or if the menu has no items, call the fallback_cb if ( !$menu || is_wp_error($menu) || ( isset($menu_items) && empty($menu_items) ) ) { if ( function_exists($args->fallback_cb) ) { $_args = array_merge( (array)$args, array('echo' => false) ); return call_user_func( $args->fallback_cb, $_args ); } } foreach ( $menu_items as $key => $menu_item ) { // Setup the $menu_item variables $menu_item = wp_setup_nav_menu_item( $menu_item, 'frontend' ); $type = sanitize_title_with_dashes( $menu_item->append ); $maybe_value = 'frontend' == $args->context ? '' : ' value="'. $menu_item->ID .'"'; $classes = 'frontend' == $args->context ? ' class="menu-item-type-'. $type . $menu_item->li_class .'"' : ''; $items .= ''; while ( !empty( $parent_stack ) && ($last_item || $menu_items[$key + 1]->post_parent != $current_parent ) ) { $items .= ''; $current_parent = array_pop( $parent_stack ); } } else { array_push( $parent_stack, $current_parent ); $current_parent = $menu_item->ID; $items .= ''; return apply_filters( 'wp_get_nav_menu', $nav_menu ); } /** * Returns the menu item formatted based on it's context. * * @since 3.0.0 * * @param string $menu_item The menu item to format. * @param string $context The context to which the menu item will be formatted to. * @param string $args Optional. Args used for the 'template' context. * @return string $output The menu formatted menu item. */ function wp_get_nav_menu_item( $menu_item, $context = 'frontend', $args = array() ) { $output = ''; switch ( $context ) { case 'frontend': $attributes = ( isset($menu_item->anchor_title) && '' != $menu_item->anchor_title ) ? ' title="'. esc_attr($menu_item->anchor_title) .'"' : ''; $attributes .= ( isset($menu_item->target) && '' != $menu_item->target ) ? ' target="'. esc_attr($menu_item->target) .'"' : ''; $attributes .= ( isset($menu_item->classes) && '' != $menu_item->classes ) ? ' class="'. esc_attr($menu_item->classes) .'"' : ''; $attributes .= ( isset($menu_item->xfn) && '' != $menu_item->xfn ) ? ' rel="'. esc_attr($menu_item->xfn) .'"' : ''; $attributes .= ( isset($menu_item->url) && '' != $menu_item->url ) ? ' href="'. esc_attr($menu_item->url) .'"' : ''; $output .= esc_html( $args->before_link ); $output .= ''; $output .= esc_html( $args->before_title . $menu_item->title . $args->after_title ); $output .= ''; $output .= esc_html( $args->after_link ); break; case 'backend': $output .= '
'; $output .= ''. esc_html($menu_item->title) .''; $output .= ''; $output .= ''. esc_html($menu_item->append) .''; // Actions $output .= ''. __('Edit') .' | '; $output .= ''. __('Delete') .''; $output .= '
'; // Menu Item Settings $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; break; case 'custom': $menu_id = 'menu-item-' . $menu_item->db_id; $output .= ''; // Menu item hidden fields $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; break; case 'taxonomy': case 'post_type': $menu_id = 'menu-item-' . $menu_item->db_id; $output .= ''; // Menu item hidden fields $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; break; } return $output; } ?>