Make WordPress Core


Ignore:
Timestamp:
11/01/2014 02:57:31 AM (12 years ago)
Author:
boonebgorges
Message:

Allow resource_type to be specified in get_ancestors().

Being explicit about resource type (taxonomy vs post_type) allows for the
proper resolution of conflicts when a taxonomy and post_type share a slug.

Props filosofo.
Fixes #15029.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/taxonomy.php

    r30122 r30141  
    40554055                if ( $t->rewrite['hierarchical'] ) {
    40564056                        $hierarchical_slugs = array();
    4057                         $ancestors = get_ancestors($term->term_id, $taxonomy);
     4057                        $ancestors = get_ancestors( $term->term_id, $taxonomy, 'taxonomy' );
    40584058                        foreach ( (array)$ancestors as $ancestor ) {
    40594059                                $ancestor_term = get_term($ancestor, $taxonomy);
     
    42804280 * Get an array of ancestor IDs for a given object.
    42814281 *
    4282  * @param int $object_id The ID of the object
    4283  * @param string $object_type The type of object for which we'll be retrieving ancestors.
    4284  * @return array of ancestors from lowest to highest in the hierarchy.
    4285  */
    4286 function get_ancestors($object_id = 0, $object_type = '') {
     4282 * @since 3.1.0
     4283 * @since 4.1.0 Introduced the 'resource_type' parameter.
     4284 *
     4285 * @param int    $object_id     The ID of the object.
     4286 * @param string $object_type   The type of object for which we'll be retrieving ancestors.
     4287 *                              Accepts a post type or a taxonomy name.
     4288 * @param string $resource_type Optional. Type of resource $object_type is. Accepts 'post_type' or 'taxonomy'.
     4289 * @return array An array of ancestors from lowest to highest in the hierarchy.
     4290 */
     4291function get_ancestors( $object_id = 0, $object_type = '', $resource_type = '' ) {
    42874292        $object_id = (int) $object_id;
    42884293
     
    42924297
    42934298                /** This filter is documented in wp-includes/taxonomy.php */
    4294                 return apply_filters( 'get_ancestors', $ancestors, $object_id, $object_type );
    4295         }
    4296 
    4297         if ( is_taxonomy_hierarchical( $object_type ) ) {
     4299                return apply_filters( 'get_ancestors', $ancestors, $object_id, $object_type, $resource_type );
     4300        }
     4301
     4302        if ( ! $resource_type ) {
     4303                if ( is_taxonomy_hierarchical( $object_type ) ) {
     4304                        $resource_type = 'taxonomy';
     4305                } else if ( post_type_exists( $object_type ) ) {
     4306                        $resource_type = 'post_type';
     4307                }
     4308        }
     4309
     4310        if ( 'taxonomy' === $resource_type ) {
    42984311                $term = get_term($object_id, $object_type);
    42994312                while ( ! is_wp_error($term) && ! empty( $term->parent ) && ! in_array( $term->parent, $ancestors ) ) {
     
    43014314                        $term = get_term($term->parent, $object_type);
    43024315                }
    4303         } elseif ( post_type_exists( $object_type ) ) {
     4316        } elseif ( 'post_type' === $resource_type ) {
    43044317                $ancestors = get_post_ancestors($object_id);
    43054318        }
     
    43104323         * @since 3.1.0
    43114324         *
    4312          * @param array  $ancestors   An array of object ancestors.
    4313          * @param int    $object_id   Object ID.
    4314          * @param string $object_type Type of object.
     4325         * @param array  $ancestors     An array of object ancestors.
     4326         * @param int    $object_id     Object ID.
     4327         * @param string $object_type   Type of object.
     4328         * @param string $resource_type Type of resource $object_type is.
    43154329         */
    43164330        return apply_filters( 'get_ancestors', $ancestors, $object_id, $object_type );
Note: See TracChangeset for help on using the changeset viewer.