WordPress.org

Make WordPress Core

Ticket #21760: 21760.4.patch

File 21760.4.patch, 2.2 KB (added by spacedmonkey, 4 years ago)
  • src/wp-includes/taxonomy.php

     
    927927 *                      or `$term` was not found.
    928928 */
    929929function get_term_by( $field, $value, $taxonomy = '', $output = OBJECT, $filter = 'raw' ) {
    930         global $wpdb;
    931930
    932931        // 'term_taxonomy_id' lookups don't require taxonomy checks.
    933932        if ( 'term_taxonomy_id' !== $field && ! taxonomy_exists( $taxonomy ) ) {
     
    934933                return false;
    935934        }
    936935
    937         $tax_clause = $wpdb->prepare( "AND tt.taxonomy = %s", $taxonomy );
     936        $args = array(
     937                'hide_empty'             => false,
     938                'number'                 => 1,
     939                'taxonomy'               => $taxonomy,
     940                'update_term_meta_cache' => false
     941        );
    938942
    939943        if ( 'slug' == $field ) {
    940                 $_field = 't.slug';
    941                 $value = sanitize_title($value);
    942                 if ( empty($value) )
    943                         return false;
     944                $args['slug'] = $value;
    944945        } elseif ( 'name' == $field ) {
    945                 // Assume already escaped
    946                 $value = wp_unslash($value);
    947                 $_field = 't.name';
     946                $args['name'] = $value;
    948947        } elseif ( 'term_taxonomy_id' == $field ) {
    949                 $value = (int) $value;
    950                 $_field = 'tt.term_taxonomy_id';
    951 
    952                 // No `taxonomy` clause when searching by 'term_taxonomy_id'.
    953                 $tax_clause = '';
     948                $args['term_taxonomy_id'] = $value;
    954949        } else {
    955                 $term = get_term( (int) $value, $taxonomy, $output, $filter );
    956                 if ( is_wp_error( $term ) || is_null( $term ) ) {
    957                         $term = false;
    958                 }
    959                 return $term;
     950                $args['include'] = $value;
    960951        }
    961952
    962         $term = $wpdb->get_row( $wpdb->prepare( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE $_field = %s", $value ) . " $tax_clause LIMIT 1" );
    963         if ( ! $term )
     953        $terms = get_terms( $args );
     954
     955        if ( is_wp_error( $terms ) || empty( $terms ) ) {
    964956                return false;
     957        }
    965958
     959        $term = array_shift( $terms );
     960
    966961        // In the case of 'term_taxonomy_id', override the provided `$taxonomy` with whatever we find in the db.
    967962        if ( 'term_taxonomy_id' === $field ) {
    968963                $taxonomy = $term->taxonomy;
    969964        }
    970965
    971         wp_cache_add( $term->term_id, $term, 'terms' );
    972 
    973966        return get_term( $term, $taxonomy, $output, $filter );
    974967}
    975968