Make WordPress Core

Changeset 14031


Ignore:
Timestamp:
04/07/2010 03:25:48 PM (16 years ago)
Author:
ryan
Message:

Nav menu fixes. Props ptahdunbar. see #12896 fixes #12844

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/nav-menu.php

    r14008 r14031  
    5656        foreach ( $post_types as $post_type ) {
    5757                $id = $post_type->name;
    58                 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 );
     58                add_meta_box( "add-{$id}", sprintf( __('Add %s'), $post_type->label ), 'wp_nav_menu_item_post_type_metabox', 'nav-menus', 'side', 'default', $post_type );
    5959        }
    6060}
     
    7373        foreach ( $taxonomies as $tax ) {
    7474                $id = $tax->name;
    75 
    76                 add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $tax->singular_label ), 'wp_nav_menu_item_taxonomy_metabox', 'nav-menus', 'side', 'default', $tax );
     75                add_meta_box( "add-{$id}", sprintf( __('Add %s'), $tax->label ), 'wp_nav_menu_item_taxonomy_metabox', 'nav-menus', 'side', 'default', $tax );
    7776        }
    7877}
  • trunk/wp-admin/nav-menus.php

    r13974 r14031  
    275275                                                        <h3 class="hndle"><?php echo esc_html( $nav_menu_selected_title ); ?></h3>
    276276                                                        <div class="inside">
    277                                                                 <?php echo wp_get_nav_menu( array( 'context' => 'backend', 'menu' => $nav_menu_selected_id ) ); ?>
     277                                                                <?php wp_nav_menu( array( 'menu' => $nav_menu_selected_id, 'context' => 'backend' ) ); ?>
    278278                                                        </div><!-- /.inside -->
    279279                                                <!-- /#nav-menu-canvas .postbox-->
  • trunk/wp-content/themes/twentyten/style.css

    r13872 r14031  
    114114h3#reply-title,
    115115#access .menu,
     116#access div.menu ul,
    116117#cancel-comment-reply-link,
    117118.form-allowed-tags,
     
    154155/* The main theme structure */
    155156#access .menu-header,
     157div.menu,
    156158#colophon,
    157159#branding,
     
    361363        float:left;
    362364}
    363 #access .menu-header {
     365#access .menu-header, div.menu {
    364366        font-size: 13px;
    365367        margin-left: 12px;
    366368}
    367 #access .menu-header ul {
     369#access .menu-header ul, div.menu ul {
    368370        list-style: none;
    369371        margin: 0;
    370372}
    371 #access .menu-header li {
     373#access .menu-header li, div.menu li {
    372374        float:left;
    373375        position: relative;
  • trunk/wp-includes/classes.php

    r13975 r14031  
    11791179         * @param int $depth Depth of menu item. Used for padding.
    11801180         * @param int $current_page Menu item ID.
    1181          * @param array $args
     1181         * @param object $args
    11821182         */
    11831183        function start_el(&$output, $item, $depth, $args) {
     
    12181218                $output .= "</li>\n";
    12191219        }
    1220 
    12211220}
    12221221
  • trunk/wp-includes/nav-menu-template.php

    r14013 r14031  
    2323 * link_after - Text after the link.
    2424 * echo - Whether to echo the menu or return it. Defaults to echo.
    25  * 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.
     25 *
     26 * @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.
    2627 *
    2728 * @since 3.0.0
     
    3233        $defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true,
    3334        'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '',
    34         'depth' => 0, 'walker' => '' );
     35        'depth' => 0, 'walker' => '', 'context' => 'frontend' );
    3536
    3637        $args = wp_parse_args( $args, $defaults );
     
    5253                }
    5354        }
    54 
    55         if ( $menu && ! is_wp_error( $menu ) )
    56                 $args->menu = $menu->term_id;
    57         $nav_menu = '';
    58 
    59         if ( 'div' == $args->container ) {
    60                 $class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : '';
    61 
    62                 if ( is_nav_menu($menu) ) {
    63                         $nav_menu .= '<div id="menu-' . $menu->slug . '"'. $class .'>';
    64                 } else {
    65                         $nav_menu .= '<div'. $class .'>';
    66                 }
    67         }
    68 
    69         $nav_menu .= wp_get_nav_menu( $args );
    70 
    71         if ( 'div' == $args->container )
    72                 $nav_menu .= '</div>';
    73 
    74         $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args );
    75 
    76         if ( $args->echo )
    77                 echo $nav_menu;
    78         else
    79                 return $nav_menu;
    80 }
    81 
    82 /**
    83  * Returns a Navigation Menu.
    84  *
    85  * See wp_nav_menu() for args.
    86  *
    87  * @since 3.0.0
    88  *
    89  * @param array $args Arguments
    90  * @return mixed $output False if menu doesn't exists, else, returns the menu.
    91  **/
    92 function wp_get_nav_menu( $args = array() ) {
    93         $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'context' => 'frontend', 'depth' => 0,
    94         'fallback_cb' => '', 'walker' => '', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', );
    95 
    96         $args = wp_parse_args( $args, $defaults );
    97         $args = apply_filters( 'wp_get_nav_menu_args', $args );
    98         $args = (object) $args;
    99 
    100         // Variable setup
    101         $nav_menu = '';
    102         $items = '';
    103 
    104         // Get the menu object
    105         $menu = wp_get_nav_menu_object( $args->menu );
    106 
     55       
    10756        // If the menu exists, get it's items.
    10857        if ( $menu && !is_wp_error($menu) )
     
    11160        // If no menu was found or if the menu has no items, call the fallback_cb
    11261        if ( !$menu || is_wp_error($menu) || ( isset($menu_items) && empty($menu_items) ) ) {
    113                 if ( function_exists($args->fallback_cb) || is_callable( $args->fallback_cb ) ) {
    114                         $_args = array_merge( (array) $args, array('echo' => false) );
    115                         return call_user_func( $args->fallback_cb, $_args );
     62                if ( 'frontend' == $args->context && ( function_exists($args->fallback_cb) || is_callable( $args->fallback_cb ) ) ) {
     63                        return call_user_func( $args->fallback_cb, (array) $args );
    11664                }
     65        }
     66       
     67        $nav_menu = '';
     68        $items = '';
     69        $container_allowedtags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'p', 'nav' ) );
     70
     71        if ( in_array( $args->container, $container_allowedtags ) ) {
     72                $class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ' class="menu-'. $menu->slug .'-container"';
     73                $nav_menu .= '<'. $args->container . $class .'>';
    11774        }
    11875
     
    12380        $items .= walk_nav_menu_tree( $menu_items, $args->depth, $args );
    12481
    125         // CSS class
    126         $ul_class = $args->menu_class ? ' class="'. $args->menu_class .'"' : '';
    127         $nav_menu .= '<ul'. $ul_class .'>';
     82        // Attributes   
     83        $attributes  = ' id="menu-' . $menu->slug . '"';
     84        $attributes .= $args->menu_class ? ' class="'. $args->menu_class .'"' : '';
     85       
     86        $nav_menu .= '<ul'. $attributes .'>';
    12887
    12988        // Allow plugins to hook into the menu to add their own <li>'s
     
    13897        $nav_menu .= '</ul>';
    13998
    140         return apply_filters( 'wp_get_nav_menu', $nav_menu );
     99        if ( in_array( $args->container, $container_allowedtags ) )
     100                $nav_menu .= '</'. $args->container .'>';
     101
     102        $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args );
     103
     104        if ( $args->echo )
     105                echo $nav_menu;
     106        else
     107                return $nav_menu;
    141108}
    142109
     
    162129                        $output .= $args->before;
    163130                        $output .= '<a'. $attributes .'>';
    164                         $output .= $args->link_before . apply_filters('the_title', $menu_item->title) . $args->link_after;
     131                        $output .= $args->link_before . apply_filters( 'the_title', $menu_item->title ) . $args->link_after;
    165132                        $output .= '</a>';
    166133                        $output .= $args->after;
     
    219186        }
    220187
    221         return $output;
     188        return apply_filters( 'wp_get_nav_menu_item', $output, $context, $args );
    222189}
    223190?>
  • trunk/wp-includes/nav-menu.php

    r13974 r14031  
    179179        $args = array( $items, $depth, $r );
    180180
    181         return call_user_func_array(array(&$walker, 'walk'), $args);
     181        return call_user_func_array( array(&$walker, 'walk'), $args );
    182182}
    183183
     
    203203                                $object = get_post_type_object( $menu_item->object );
    204204                                $menu_item->append = $object->singular_label;
     205                                $menu_item->url = get_permalink( $menu_item->object_id );
    205206
    206207                        } elseif ( 'taxonomy' == $menu_item->type ) {
    207208                                $object = get_taxonomy( $menu_item->object );
    208209                                $menu_item->append = $object->singular_label;
     210                                $menu_item->url = get_term_link( (int) $menu_item->object_id, $menu_item->object );
    209211
    210212                        } else {
    211213                                $menu_item->append = __('Custom');
     214                                $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
    212215                        }
    213216
    214217                        $menu_item->title = $menu_item->post_title;
    215                         $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
    216218                        $menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
    217219
     
    222224                        $menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true );
    223225                        break;
    224 
     226               
    225227                case 'custom':
    226228                        $menu_item->db_id = 0;
     
    236238                        $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
    237239                        $menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
    238                         $menu_item->classes = '';
    239                         $menu_item->xfn = '';
     240                        $menu_item->classes = get_post_meta( $menu_item->ID, '_menu_item_target', true );
     241                        $menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true );
    240242                        break;
    241243
     
    274276                        $menu_item->target = '';
    275277                        $menu_item->attr_title = '';
    276                         $menu_item->description = strip_tags( $menu_item->description );
     278                        $menu_item->description = '';
    277279                        $menu_item->classes = '';
    278280                        $menu_item->xfn = '';
    279281                        break;
    280282        }
    281         return $menu_item;
     283       
     284        return apply_filters( 'wp_setup_nav_menu_item', $menu_item, $menu_item_type, $menu_item_object );
    282285}
    283286?>
Note: See TracChangeset for help on using the changeset viewer.