Make WordPress Core

Changeset 15105


Ignore:
Timestamp:
06/02/2010 01:48:26 PM (15 years ago)
Author:
ryan
Message:

Consolidate nav menu class assignments. Props filosofo. fixes #13664

File:
1 edited

Legend:

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

    r15077 r15105  
    6969        $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
    7070
    71         $classes = $value = '';
    72 
    73         $classes = array( 'menu-item', 'menu-item-type-' . $item->type );
    74         if ( !empty($item->classes) )
    75             $classes = array_merge( $classes, $item->classes );
    76 
    77         if ( 'custom' != $item->type ) {
    78             $classes[] = 'menu-item-object-' . $item->object;
    79             $classes[] = 'menu-item-object-' . $item->type . '-' . $item->object_id;
    80             if ( 'post_type' == $item->type && 'page' == $item->object ) {
    81                 // Back compat classes for pages to match wp_page_menu()
    82                 $classes[] = 'page_item';
    83                 $classes[] = 'page-item-' . $item->object_id;
    84                 if ( ! empty( $item->classes ) ) {
    85                     if ( in_array('current-menu-item', $classes) )
    86                         $classes[] = 'current_page_item';
    87                     if ( in_array('current-menu-parent', $classes) )
    88                         $classes[] = 'current_page_parent';
    89                     if ( in_array('current-menu-ancestor', $classes) )
    90                         $classes[] = 'current_page_ancestor';
    91                 }
    92             }
    93         } elseif ( 'custom' == $item->type && in_array('current-menu-item', $classes) && in_array('menu-item-home', $classes) ) {
    94             // Back compat for home limk to match wp_page_menu()
    95             $classes[] = 'current_page_item';
    96         }
    97 
    98         $classes = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
    99         $classes = ' class="' . esc_attr( $classes ) . '"';
    100 
    101         $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $classes .'>';
     71        $class_names = $value = '';
     72
     73        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
     74
     75        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
     76        $class_names = ' class="' . esc_attr( $class_names ) . '"';
     77
     78        $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';
    10279
    10380        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
     
    287264
    288265    foreach ( (array) $menu_items as $key => $menu_item ) {
     266        $classes = (array) $menu_item->classes;
     267        $classes[] = 'menu-item';
     268        $classes[] = 'menu-item-type-' . $menu_item->type;
     269
    289270        // if the menu item corresponds to a taxonomy term for the currently-queried non-hierarchical post object
    290271        if ( $wp_query->is_singular && 'taxonomy' == $menu_item->type && in_array( $menu_item->object_id, $possible_object_parents ) ) {
     
    302283            )
    303284        ) {
    304             $menu_items[$key]->classes[] = 'current-menu-item';
     285            $classes[] = 'current-menu-item';
     286            if ( 'post_type' == $menu_item->type && 'page' == $menu_item->object ) {
     287                // Back compat classes for pages to match wp_page_menu()
     288                $classes[] = 'page_item';
     289                $classes[] = 'page-item-' . $menu_item->object_id;
     290                $classes[] = 'current_page_item';
     291            }
    305292            $active_parent_item_ids[] = (int) $menu_item->menu_item_parent;
    306293            $active_parent_object_ids[] = (int) $menu_item->post_parent;
     
    312299            $item_url = strpos( $menu_item->url, '#' ) ? substr( $menu_item->url, 0, strpos( $menu_item->url, '#' ) ) : $menu_item->url;
    313300            if ( $item_url == $current_url ) {
    314                 $menu_items[$key]->classes[] = 'current-menu-item';
    315                 if ( untrailingslashit($current_url) == home_url() )
    316                     $menu_items[$key]->classes[] = 'menu-item-home';
     301                $classes[] = 'current-menu-item';
     302                if ( untrailingslashit($current_url) == home_url() ) {
     303                    $classes[] = 'menu-item-home';
     304                    // Back compat for home limk to match wp_page_menu()
     305                    $classes[] = 'current_page_item';
     306                }
    317307                $active_parent_item_ids[] = (int) $menu_item->menu_item_parent;
    318308                $active_parent_object_ids[] = (int) $menu_item->post_parent;
     
    323313        // back-compat with wp_page_menu: add "current_page_parent" to static home page link for any non-page query
    324314        if ( ! empty( $home_page_id ) && 'post_type' == $menu_item->type && empty( $wp_query->is_page ) && $home_page_id == $menu_item->object_id )
    325             $menu_items[$key]->classes[] = 'current_page_parent';
     315            $classes[] = 'current_page_parent';
     316
     317        $menu_items[$key]->classes = array_unique( $classes );
    326318    }
    327319
     
    331323    // set parent's class
    332324    foreach ( (array) $menu_items as $key => $parent_item ) {
     325        $classes = (array) $parent_item->classes;
     326
    333327        if (
    334328            isset( $parent_item->type ) &&
     
    337331            is_post_type_hierarchical( $queried_object->post_type ) &&
    338332            in_array( $parent_item->object_id, $queried_object->ancestors )
    339         )
    340             $menu_items[$key]->classes[] = 'current-' . $queried_object->post_type . '-ancestor current-menu-ancestor';
     333        ) {
     334            $classes[] = 'current-' . $queried_object->post_type . '-ancestor';
     335            $classes[] = 'current-menu-ancestor';
     336        }
    341337        if ( in_array( $parent_item->db_id, $active_parent_item_ids ) )
    342             $menu_items[$key]->classes[] = 'current-menu-parent';
     338            $classes[] = 'current-menu-parent';
    343339        if ( in_array( $parent_item->object_id, $active_parent_object_ids ) )
    344             $menu_items[$key]->classes[] = 'current-' . $active_object . '-parent';
     340            $classes[] = 'current-' . $active_object . '-parent';
     341       
     342        if ( 'post_type' == $parent_item->type && 'page' == $parent_item->object ) {
     343            // Back compat classes for pages to match wp_page_menu()
     344            if ( in_array('current-menu-parent', $classes) )
     345                $classes[] = 'current_page_parent';
     346            if ( in_array('current-menu-ancestor', $classes) )
     347                $classes[] = 'current_page_ancestor';
     348        }
     349       
     350        $menu_items[$key]->classes = array_unique( $classes );
    345351    }
    346352}
Note: See TracChangeset for help on using the changeset viewer.