WordPress.org

Make WordPress Core

Ticket #21760: 21760.4.diff

File 21760.4.diff, 3.0 KB (added by wonderboymusic, 6 years ago)
  • src/wp-includes/taxonomy.php

     
    963963        }
    964964
    965965        if ( is_object($term) && empty($term->filter) ) {
    966                 wp_cache_add($term->term_id, $term, $taxonomy);
     966                wp_cache_add( $term->term_id, $term, $taxonomy );
     967                wp_cache_add( "slug:{$term->slug}", $term->term_id, $taxonomy );
    967968                $_term = $term;
    968969        } else {
    969970                if ( is_object($term) )
     
    974975                        $_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 tt.taxonomy = %s AND t.term_id = %d LIMIT 1", $taxonomy, $term) );
    975976                        if ( ! $_term )
    976977                                return null;
    977                         wp_cache_add($term, $_term, $taxonomy);
     978                        wp_cache_add( $term, $_term, $taxonomy );
     979                        wp_cache_add( "slug:{$_term->slug}", $term, $taxonomy );
    978980                }
    979981        }
    980982
     
    10461048        if ( ! taxonomy_exists($taxonomy) )
    10471049                return false;
    10481050
     1051        $cache = false;
    10491052        if ( 'slug' == $field ) {
    10501053                $field = 't.slug';
    10511054                $value = sanitize_title($value);
    10521055                if ( empty($value) )
    10531056                        return false;
     1057                $term_id = wp_cache_get( "slug:{$value}", $taxonomy );
     1058                if ( $term_id ) {
     1059                        $value = $term_id;
     1060                        $cache = true;
     1061                }
    10541062        } else if ( 'name' == $field ) {
    10551063                // Assume already escaped
    10561064                $value = wp_unslash($value);
     
    10591067                $value = (int) $value;
    10601068                $field = 'tt.term_taxonomy_id';
    10611069        } else {
     1070                $cache = true;
     1071        }
     1072
     1073        if ( $cache ) {
    10621074                $term = get_term( (int) $value, $taxonomy, $output, $filter);
    10631075                if ( is_wp_error( $term ) )
    10641076                        $term = false;
     
    10691081        if ( !$term )
    10701082                return false;
    10711083
    1072         wp_cache_add($term->term_id, $term, $taxonomy);
     1084        wp_cache_add( $term->term_id, $term, $taxonomy );
     1085        wp_cache_add( "slug:{$term->slug}", $term->term_id, $taxonomy );
    10731086
    10741087        /** This filter is documented in wp-includes/taxonomy.php */
    10751088        $term = apply_filters( 'get_term', $term, $taxonomy );
     
    32703283        if ( empty($taxonomy) ) {
    32713284                $tt_ids = array_map('intval', $ids);
    32723285                $tt_ids = implode(', ', $tt_ids);
    3273                 $terms = $wpdb->get_results("SELECT term_id, taxonomy FROM $wpdb->term_taxonomy WHERE term_taxonomy_id IN ($tt_ids)");
     3286                $terms = $wpdb->get_results( "SELECT t.slug, tt.term_id, tt.taxonomy FROM $wpdb->terms t INNER JOIN $wpdb->term_taxonomy tt WHERE tt.term_taxonomy_id IN ($tt_ids)" );
    32743287                $ids = array();
    32753288                foreach ( (array) $terms as $term ) {
    32763289                        $taxonomies[] = $term->taxonomy;
    32773290                        $ids[] = $term->term_id;
    3278                         wp_cache_delete($term->term_id, $term->taxonomy);
     3291                        wp_cache_delete( $term->term_id, $term->taxonomy );
     3292                        wp_cache_delete( "slug:{$term->slug}", $term->taxonomy );
    32793293                }
    32803294                $taxonomies = array_unique($taxonomies);
    32813295        } else {
     
    34073421                if ( empty($term_taxonomy) )
    34083422                        $term_taxonomy = $term->taxonomy;
    34093423
    3410                 wp_cache_add($term->term_id, $term, $term_taxonomy);
     3424                wp_cache_add( $term->term_id, $term, $term_taxonomy );
     3425                wp_cache_add( "slug:{$term->slug}", $term->term_id, $term_taxonomy );
    34113426        }
    34123427}
    34133428