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, 8 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 ) )