diff --git a/wp-admin/includes/nav-menu.php b/wp-admin/includes/nav-menu.php index 976ea9f364..9b1d10cbe6 100644 --- a/wp-admin/includes/nav-menu.php +++ b/wp-admin/includes/nav-menu.php @@ -55,7 +55,7 @@ function wp_nav_menu_post_type_metaboxes() { foreach ( $post_types as $post_type ) { $id = $post_type->name; - add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $post_type->singular_label ), 'wp_nav_menu_item_post_type_metabox', 'nav-menus', 'side', 'default', $post_type ); + add_meta_box( "add-{$id}", sprintf( __('Add %s'), $post_type->label ), 'wp_nav_menu_item_post_type_metabox', 'nav-menus', 'side', 'default', $post_type ); } } @@ -72,8 +72,7 @@ function wp_nav_menu_taxonomy_metaboxes() { foreach ( $taxonomies as $tax ) { $id = $tax->name; - - add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $tax->singular_label ), 'wp_nav_menu_item_taxonomy_metabox', 'nav-menus', 'side', 'default', $tax ); + add_meta_box( "add-{$id}", sprintf( __('Add %s'), $tax->label ), 'wp_nav_menu_item_taxonomy_metabox', 'nav-menus', 'side', 'default', $tax ); } } diff --git a/wp-admin/nav-menus.php b/wp-admin/nav-menus.php index ff51e1e5fb..f7b30afea4 100644 --- a/wp-admin/nav-menus.php +++ b/wp-admin/nav-menus.php @@ -274,7 +274,7 @@ require_once( 'admin-header.php' ); diff --git a/wp-content/themes/twentyten/style.css b/wp-content/themes/twentyten/style.css index ae8b577e79..ff6b25c5a1 100644 --- a/wp-content/themes/twentyten/style.css +++ b/wp-content/themes/twentyten/style.css @@ -113,6 +113,7 @@ textarea, h3#comments-title, h3#reply-title, #access .menu, +#access div.menu ul, #cancel-comment-reply-link, .form-allowed-tags, #site-info, @@ -153,6 +154,7 @@ code { /* The main theme structure */ #access .menu-header, +div.menu, #colophon, #branding, #main, @@ -360,15 +362,15 @@ a:hover { display:block; float:left; } -#access .menu-header { +#access .menu-header, div.menu { font-size: 13px; margin-left: 12px; } -#access .menu-header ul { +#access .menu-header ul, div.menu ul { list-style: none; margin: 0; } -#access .menu-header li { +#access .menu-header li, div.menu li { float:left; position: relative; } diff --git a/wp-includes/classes.php b/wp-includes/classes.php index 15ce7c6f5d..6d1507fed4 100644 --- a/wp-includes/classes.php +++ b/wp-includes/classes.php @@ -1178,7 +1178,7 @@ class Walker_Nav_Menu extends Walker { * @param object $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param int $current_page Menu item ID. - * @param array $args + * @param object $args */ function start_el(&$output, $item, $depth, $args) { $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; @@ -1217,7 +1217,6 @@ class Walker_Nav_Menu extends Walker { function end_el(&$output, $item, $depth) { $output .= "\n"; } - } /** diff --git a/wp-includes/nav-menu-template.php b/wp-includes/nav-menu-template.php index 673497b802..9751b9ada1 100644 --- a/wp-includes/nav-menu-template.php +++ b/wp-includes/nav-menu-template.php @@ -22,7 +22,8 @@ * link_before - Text before the link. * link_after - Text after the link. * echo - Whether to echo the menu or return it. Defaults to echo. - * show_home - If you set this argument, then it will display the link to the home page. The show_home argument really just needs to be set to the value of the text of the link. + * + * @todo show_home - If you set this argument, then it will display the link to the home page. The show_home argument really just needs to be set to the value of the text of the link. * * @since 3.0.0 * @@ -31,7 +32,7 @@ function wp_nav_menu( $args = array() ) { $defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', - 'depth' => 0, 'walker' => '' ); + 'depth' => 0, 'walker' => '', 'context' => 'frontend' ); $args = wp_parse_args( $args, $defaults ); $args = apply_filters( 'wp_nav_menu_args', $args ); @@ -51,70 +52,26 @@ function wp_nav_menu( $args = array() ) { } } } - - if ( $menu && ! 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', 'depth' => 0, - 'fallback_cb' => '', 'walker' => '', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', ); - - $args = wp_parse_args( $args, $defaults ); - $args = apply_filters( 'wp_get_nav_menu_args', $args ); - $args = (object) $args; - - // Variable setup - $nav_menu = ''; - $items = ''; - - // 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, $args->context ); // 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) || is_callable( $args->fallback_cb ) ) { - $_args = array_merge( (array) $args, array('echo' => false) ); - return call_user_func( $args->fallback_cb, $_args ); + if ( 'frontend' == $args->context && ( function_exists($args->fallback_cb) || is_callable( $args->fallback_cb ) ) ) { + return call_user_func( $args->fallback_cb, (array) $args ); } } + + $nav_menu = ''; + $items = ''; + $container_allowedtags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'p', 'nav' ) ); + + if ( in_array( $args->container, $container_allowedtags ) ) { + $class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ' class="menu-'. $menu->slug .'-container"'; + $nav_menu .= '<'. $args->container . $class .'>'; + } // Set up the $menu_item variables foreach ( (array) $menu_items as $key => $menu_item ) @@ -122,9 +79,11 @@ function wp_get_nav_menu( $args = array() ) { $items .= walk_nav_menu_tree( $menu_items, $args->depth, $args ); - // CSS class - $ul_class = $args->menu_class ? ' class="'. $args->menu_class .'"' : ''; - $nav_menu .= ''; + // Attributes + $attributes = ' id="menu-' . $menu->slug . '"'; + $attributes .= $args->menu_class ? ' class="'. $args->menu_class .'"' : ''; + + $nav_menu .= ''; // Allow plugins to hook into the menu to add their own
  • 's if ( 'frontend' == $args->context ) { @@ -137,7 +96,15 @@ function wp_get_nav_menu( $args = array() ) { $nav_menu .= ''; - return apply_filters( 'wp_get_nav_menu', $nav_menu ); + if ( in_array( $args->container, $container_allowedtags ) ) + $nav_menu .= 'container .'>'; + + $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args ); + + if ( $args->echo ) + echo $nav_menu; + else + return $nav_menu; } /** @@ -161,7 +128,7 @@ function wp_get_nav_menu_item( $menu_item, $context = 'frontend', $args = array( $output .= $args->before; $output .= ''; - $output .= $args->link_before . apply_filters('the_title', $menu_item->title) . $args->link_after; + $output .= $args->link_before . apply_filters( 'the_title', $menu_item->title ) . $args->link_after; $output .= ''; $output .= $args->after; @@ -218,6 +185,6 @@ function wp_get_nav_menu_item( $menu_item, $context = 'frontend', $args = array( break; } - return $output; + return apply_filters( 'wp_get_nav_menu_item', $output, $context, $args ); } ?> \ No newline at end of file diff --git a/wp-includes/nav-menu.php b/wp-includes/nav-menu.php index 08b437e849..ed45566e2c 100644 --- a/wp-includes/nav-menu.php +++ b/wp-includes/nav-menu.php @@ -178,7 +178,7 @@ function walk_nav_menu_tree( $items, $depth, $r ) { $walker = ( empty($r->walker) ) ? new Walker_Nav_Menu : $r->walker; $args = array( $items, $depth, $r ); - return call_user_func_array(array(&$walker, 'walk'), $args); + return call_user_func_array( array(&$walker, 'walk'), $args ); } /** @@ -202,17 +202,19 @@ function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_ if ( 'post_type' == $menu_item->type ) { $object = get_post_type_object( $menu_item->object ); $menu_item->append = $object->singular_label; + $menu_item->url = get_permalink( $menu_item->object_id ); } elseif ( 'taxonomy' == $menu_item->type ) { $object = get_taxonomy( $menu_item->object ); $menu_item->append = $object->singular_label; + $menu_item->url = get_term_link( (int) $menu_item->object_id, $menu_item->object ); } else { $menu_item->append = __('Custom'); + $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true ); } $menu_item->title = $menu_item->post_title; - $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true ); $menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true ); $menu_item->attr_title = strip_tags( $menu_item->post_excerpt ); @@ -221,7 +223,7 @@ function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_ $menu_item->classes = get_post_meta( $menu_item->ID, '_menu_item_classes', true ); $menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true ); break; - + case 'custom': $menu_item->db_id = 0; $menu_item->object_id = (int) $menu_item->ID; @@ -235,8 +237,8 @@ function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_ $menu_item->title = $menu_item->post_title; $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true ); $menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true ); - $menu_item->classes = ''; - $menu_item->xfn = ''; + $menu_item->classes = get_post_meta( $menu_item->ID, '_menu_item_target', true ); + $menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true ); break; case 'post_type': @@ -273,11 +275,12 @@ function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_ $menu_item->url = get_term_link( $menu_item, $menu_item_object ); $menu_item->target = ''; $menu_item->attr_title = ''; - $menu_item->description = strip_tags( $menu_item->description ); + $menu_item->description = ''; $menu_item->classes = ''; $menu_item->xfn = ''; break; } - return $menu_item; + + return apply_filters( 'wp_setup_nav_menu_item', $menu_item, $menu_item_type, $menu_item_object ); } -?> +?> \ No newline at end of file