WordPress.org

Make WordPress Core

Ticket #13170: get_terms_by.2.diff

File get_terms_by.2.diff, 4.1 KB (added by scribu, 8 years ago)

introduce wp_cache_get_group()

  • wp-includes/taxonomy.php

     
    516516        if ( ! is_taxonomy($taxonomy) )
    517517                return false;
    518518
    519         if ( 'slug' == $field ) {
    520                 $field = 't.slug';
    521                 $value = sanitize_title($value);
    522                 if ( empty($value) )
     519        $terms = wp_cache_get_group($taxonomy);
     520        $in_cache = false;
     521        foreach ( $terms as $term )
     522                if ( $term->$field == $value ) {
     523                        $term = wp_clone($term);
     524                        $in_cache = true;
     525                        break;
     526                }
     527
     528        if ( ! $in_cache ) {
     529                if ( 'slug' == $field ) {
     530                        $field = 't.slug';
     531                        $value = sanitize_title($value);
     532                        if ( empty($value) )
     533                                return false;
     534                } else if ( 'name' == $field ) {
     535                        // Assume already escaped
     536                        $value = stripslashes($value);
     537                        $field = 't.name';
     538                } else {
     539                        $field = 't.term_id';
     540                        $value = (int) $value;
     541                }
     542
     543                $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 $field = %s LIMIT 1", $taxonomy, $value ) );
     544                if ( !$term )
    523545                        return false;
    524         } else if ( 'name' == $field ) {
    525                 // Assume already escaped
    526                 $value = stripslashes($value);
    527                 $field = 't.name';
    528         } else {
    529                 $field = 't.term_id';
    530                 $value = (int) $value;
     546
     547                wp_cache_add($term->term_id, $term, $taxonomy);
    531548        }
    532549
    533         $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 $field = %s LIMIT 1", $taxonomy, $value) );
    534         if ( !$term )
    535                 return false;
    536 
    537         wp_cache_add($term->term_id, $term, $taxonomy);
    538 
    539550        $term = sanitize_term($term, $taxonomy, $filter);
    540551
    541552        if ( $output == OBJECT ) {
  • wp-includes/cache.php

     
    8383 * @see WP_Object_Cache::get()
    8484 *
    8585 * @param int|string $id What the contents in the cache are called
    86  * @param string $flag Where the cache contents are grouped
     86 * @param string $group Where the cache contents are grouped
    8787 * @return bool|mixed False on failure to retrieve contents or the cache
    8888 *              contents on success
    8989 */
    90 function wp_cache_get($id, $flag = '') {
     90function wp_cache_get($id, $group = '') {
    9191        global $wp_object_cache;
    9292
    93         return $wp_object_cache->get($id, $flag);
     93        return $wp_object_cache->get($id, $group);
    9494}
    9595
    9696/**
     97 * Retrieves the cached items in a group
     98 *
     99 * @since 3.1.0
     100 * @uses $wp_object_cache Object Cache Class
     101 * @see WP_Object_Cache::get_group()
     102 *
     103 * @param string $group Where the cache contents are grouped
     104 * @return array List of cached objects
     105 */
     106function wp_cache_get_group($group) {
     107        global $wp_object_cache;
     108
     109        return $wp_object_cache->get_group($group);
     110}
     111
     112
     113/**
    97114 * Sets up Object Cache Global and assigns it.
    98115 *
    99116 * @since 2.0.0
     
    346363         *              contents on success
    347364         */
    348365        function get($id, $group = 'default') {
    349                 if ( empty ($group) )
     366                if ( empty($group) )
    350367                        $group = 'default';
    351368
    352                 if ( isset ($this->cache[$group][$id]) ) {
    353                         $this->cache_hits += 1;
     369                if ( isset($this->cache[$group][$id]) ) {
     370                        $this->cache_hits++;
    354371                        if ( is_object($this->cache[$group][$id]) )
    355372                                return wp_clone($this->cache[$group][$id]);
    356373                        else
    357374                                return $this->cache[$group][$id];
    358375                }
    359376
    360                 if ( isset ($this->non_existent_objects[$group][$id]) )
     377                if ( isset($this->non_existent_objects[$group][$id]) )
    361378                        return false;
    362379
    363380                $this->non_existent_objects[$group][$id] = true;
    364                 $this->cache_misses += 1;
     381                $this->cache_misses++;
    365382                return false;
    366383        }
    367384
    368385        /**
     386         * Retrieves the cached items in a group
     387         *
     388         * @since 3.1.0
     389         *
     390         * @param string $group Where the cache contents are grouped
     391         * @return array List of cached objects
     392         */
     393        function get_group($group) {
     394                if ( isset($this->cache[$group]) ) {
     395                        $this->cache_hits++;
     396                        return $this->cache[$group];
     397                }
     398
     399                $this->cache_misses++;
     400                return array();
     401        }
     402
     403        /**
    369404         * Replace the contents in the cache, if contents already exist
    370405         *
    371406         * @since 2.0.0