WordPress.org

Make WordPress Core

Changeset 15257


Ignore:
Timestamp:
06/14/2010 09:19:55 PM (8 years ago)
Author:
ryan
Message:

Menu ancestor fixes. Props filosofo. fixes #12812

File:
1 edited

Legend:

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

    r15235 r15257  
    249249
    250250    $active_object = '';
     251    $active_ancestor_item_ids = array();
    251252    $active_parent_item_ids = array();
    252253    $active_parent_object_ids = array();
     
    328329        ) {
    329330            $classes[] = 'current-menu-item';
     331            $_anc_id = (int) $menu_item->db_id;
     332
     333            while(
     334                ( $_anc_id = get_post_meta( $_anc_id, '_menu_item_menu_item_parent', true ) ) &&
     335                ! in_array( $_anc_id, $active_ancestor_item_ids )
     336            ) {
     337                $active_ancestor_item_ids[] = $_anc_id;
     338            }
     339
    330340            if ( 'post_type' == $menu_item->type && 'page' == $menu_item->object ) {
    331341                // Back compat classes for pages to match wp_page_menu()
     
    344354            if ( $item_url == $current_url ) {
    345355                $classes[] = 'current-menu-item';
     356                $_anc_id = (int) $menu_item->db_id;
     357
     358                while(
     359                    ( $_anc_id = get_post_meta( $_anc_id, '_menu_item_menu_item_parent', true ) ) &&
     360                    ! in_array( $_anc_id, $active_ancestor_item_ids )
     361                ) {
     362                    $active_ancestor_item_ids[] = $_anc_id;
     363                }
     364
    346365                if ( untrailingslashit($current_url) == home_url() ) {
    347366                    $classes[] = 'menu-item-home';
     
    361380        $menu_items[$key]->classes = array_unique( $classes );
    362381    }
    363 
     382    $active_ancestor_item_ids = array_filter( array_unique( $active_ancestor_item_ids ) );
    364383    $active_parent_item_ids = array_filter( array_unique( $active_parent_item_ids ) );
    365384    $active_parent_object_ids = array_filter( array_unique( $active_parent_object_ids ) );
     
    389408        ) {
    390409            $classes[] = empty( $queried_object->taxonomy ) ? 'current-' . $queried_object->post_type . '-ancestor' : 'current-' . $queried_object->taxonomy . '-ancestor';
     410        }
     411
     412        if ( in_array(  intval( $parent_item->db_id ), $active_ancestor_item_ids ) ) {
    391413            $classes[] = 'current-menu-ancestor';
    392414        }
    393 
    394415        if ( in_array( $parent_item->db_id, $active_parent_item_ids ) )
    395416            $classes[] = 'current-menu-parent';
Note: See TracChangeset for help on using the changeset viewer.