Make WordPress Core

Changeset 35851


Ignore:
Timestamp:
12/10/2015 03:43:50 AM (11 years ago)
Author:
boonebgorges
Message:

Improve handling for WP_Error objects in get_the_terms().

wp_get_object_terms() can return a WP_Error object. As such, the
get_the_terms() cache wrapper should handle them properly. To wit:

  • Don't try to map an error object to get_term(). Introduced in [35032].
  • Don't cache an error object as taxonomy relationships. Introduced in at least [16487], maybe earlier.

Ports [35850] to the 4.4 branch.

Props stephenharris.
Fixes #34723.

Location:
branches/4.4
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/4.4

  • branches/4.4/src/wp-includes/category-template.php

    r35293 r35851  
    11491149        if ( false === $terms ) {
    11501150                $terms = wp_get_object_terms( $post->ID, $taxonomy );
    1151                 $to_cache = array();
    1152                 foreach ( $terms as $key => $term ) {
    1153                         $to_cache[ $key ] = $term->data;
    1154                 }
    1155                 wp_cache_add( $post->ID, $to_cache, $taxonomy . '_relationships' );
    1156         }
    1157 
    1158         $terms = array_map( 'get_term', $terms );
     1151                if ( ! is_wp_error( $terms ) ) {
     1152                        $to_cache = array();
     1153                        foreach ( $terms as $key => $term ) {
     1154                                $to_cache[ $key ] = $term->data;
     1155                        }
     1156                        wp_cache_add( $post->ID, $to_cache, $taxonomy . '_relationships' );
     1157                }
     1158        }
     1159
     1160        if ( ! is_wp_error( $terms ) ) {
     1161                $terms = array_map( 'get_term', $terms );
     1162        }
    11591163
    11601164        /**
  • branches/4.4/tests/phpunit/tests/term.php

    r35246 r35851  
    628628                $this->assertWPError( $cat_id2 );
    629629        }
     630
     631        /**
     632         * @ticket 34723
     633         */
     634        function test_get_the_terms_should_return_wp_error_when_taxonomy_is_unregistered() {
     635                $p = self::$post_ids[0];
     636                $terms = get_the_terms( $p, 'this-taxonomy-does-not-exist' );
     637                $this->assertTrue( is_wp_error( $terms ) );
     638        }
    630639}
Note: See TracChangeset for help on using the changeset viewer.