WordPress.org

Make WordPress Core

Changeset 15221


Ignore:
Timestamp:
06/11/2010 04:00:29 PM (11 years ago)
Author:
wpmuguru
Message:

add ancestor classes for taxonomy objects, props filosofo, fixes #13831

File:
1 edited

Legend:

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

    r15184 r15221  
    251251    $active_parent_item_ids = array();
    252252    $active_parent_object_ids = array();
     253    $possible_taxonomy_ancestors = array();
    253254    $possible_object_parents = array();
    254255    $home_page_id = (int) get_option( 'page_for_posts' );
     
    257258        foreach ( (array) get_object_taxonomies( $queried_object->post_type ) as $taxonomy ) {
    258259            if ( is_taxonomy_hierarchical( $taxonomy ) ) {
     260                $term_hierarchy = _get_term_hierarchy( $taxonomy );
    259261                $terms = wp_get_object_terms( $queried_object_id, $taxonomy, array( 'fields' => 'ids' ) );
    260                 if ( is_array( $terms ) )
     262                if ( is_array( $terms ) ) {
    261263                    $possible_object_parents = array_merge( $possible_object_parents, $terms );
     264                    $term_to_ancestor = array();
     265                    foreach ( (array) $term_hierarchy as $anc => $descs ) {
     266                        foreach ( (array) $descs as $desc )
     267                            $term_to_ancestor[ $desc ] = $anc;
     268                    }
     269                   
     270                    foreach ( $terms as $desc ) {
     271                        do {
     272                            $possible_taxonomy_ancestors[ $taxonomy ][] = $desc;
     273                            if ( isset( $term_to_ancestor[ $desc ] ) ) {
     274                                $_desc = $term_to_ancestor[ $desc ];
     275                                unset( $term_to_ancestor[ $desc ] );
     276                                $desc = $_desc;
     277                            } else {
     278                                $desc = 0;
     279                            }
     280                        } while ( ! empty( $desc ) );
     281                    }
     282                }
    262283            }
    263284        }
    264285    } elseif ( ! empty( $queried_object->post_type ) && is_post_type_hierarchical( $queried_object->post_type ) ) {
    265286        _get_post_ancestors( $queried_object );
     287    } elseif ( ! empty( $queried_object->taxonomy ) && is_taxonomy_hierarchical( $queried_object->taxonomy ) ) {
     288        $term_hierarchy = _get_term_hierarchy( $queried_object->taxonomy );
     289        $term_to_ancestor = array();
     290        foreach ( (array) $term_hierarchy as $anc => $descs ) {
     291            foreach ( (array) $descs as $desc )
     292                $term_to_ancestor[ $desc ] = $anc;
     293        }
     294        $desc = $queried_object->term_id;
     295        do {
     296            $possible_taxonomy_ancestors[ $queried_object->taxonomy ][] = $desc;
     297            if ( isset( $term_to_ancestor[ $desc ] ) ) {
     298                $_desc = $term_to_ancestor[ $desc ];
     299                unset( $term_to_ancestor[ $desc ] );
     300                $desc = $_desc;
     301            } else {
     302                $desc = 0;
     303            }
     304        } while ( ! empty( $desc ) );
    266305    }
    267306
     
    332371        if (
    333372            isset( $parent_item->type ) &&
    334             'post_type' == $parent_item->type &&
    335             ! empty( $queried_object->post_type ) &&
    336             is_post_type_hierarchical( $queried_object->post_type ) &&
    337             in_array( $parent_item->object_id, $queried_object->ancestors )
     373            (
     374                // ancestral post object
     375                (
     376                    'post_type' == $parent_item->type &&
     377                    ! empty( $queried_object->post_type ) &&
     378                    is_post_type_hierarchical( $queried_object->post_type ) &&
     379                    in_array( $parent_item->object_id, $queried_object->ancestors )
     380                ) ||
     381
     382                // ancestral term
     383                (
     384                    'taxonomy' == $parent_item->type &&
     385                    isset( $possible_taxonomy_ancestors[ $parent_item->object ] ) &&
     386                    in_array( $parent_item->object_id, $possible_taxonomy_ancestors[ $parent_item->object ] )
     387                )
     388            )
    338389        ) {
    339             $classes[] = 'current-' . $queried_object->post_type . '-ancestor';
     390            $classes[] = empty( $queried_object->taxonomy ) ? 'current-' . $queried_object->post_type . '-ancestor' : 'current-' . $queried_object->taxonomy . '-ancestor';
    340391            $classes[] = 'current-menu-ancestor';
    341392        }
     393
    342394        if ( in_array( $parent_item->db_id, $active_parent_item_ids ) )
    343395            $classes[] = 'current-menu-parent';
Note: See TracChangeset for help on using the changeset viewer.