WordPress.org

Make WordPress Core

Ticket #12812: current-menu-ancestor-actual.12812.diff

File current-menu-ancestor-actual.12812.diff, 2.4 KB (added by filosofo, 4 years ago)
  • wp-includes/nav-menu-template.php

     
    248248        $queried_object_id = (int) $wp_query->queried_object_id; 
    249249 
    250250        $active_object = ''; 
     251        $active_ancestor_item_ids = array(); 
    251252        $active_parent_item_ids = array(); 
    252253        $active_parent_object_ids = array(); 
    253254        $possible_taxonomy_ancestors = array(); 
     
    327328                        ) 
    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() 
    332342                                $classes[] = 'page_item'; 
     
    343353                        $item_url = strpos( $menu_item->url, '#' ) ? substr( $menu_item->url, 0, strpos( $menu_item->url, '#' ) ) : $menu_item->url; 
    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'; 
    348367                                        // Back compat for home limk to match wp_page_menu() 
     
    360379 
    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 ) ); 
    366385 
     
    388407                        ) 
    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'; 
    396417                if ( in_array( $parent_item->object_id, $active_parent_object_ids ) )