WordPress.org

Make WordPress Core

Changeset 35851


Ignore:
Timestamp:
12/10/2015 03:43:50 AM (4 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.