Make WordPress Core

Changeset 5598


Ignore:
Timestamp:
05/30/2007 03:36:59 AM (19 years ago)
Author:
ryan
Message:

Some term caching. see #4189

Location:
trunk/wp-includes
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/category-template.php

    r5590 r5598  
    6161
    6262function get_the_category($id = false) {
    63         global $post, $category_cache, $blog_id;
     63        global $post, $term_cache, $blog_id;
    6464
    6565        $id = (int) $id;
    … …  
    6767                $id = (int) $post->ID;
    6868
    69         $categories = get_object_terms($id, 'category');
     69        $categories = get_post_term_cache($id, 'category');
     70        if ( false === $categories )
     71                $categories = get_object_terms($id, 'category');
    7072
    7173        if ( !empty($categories) )
    … …  
    417419                $id = (int) $post->ID;
    418420
    419         $tags = wp_get_post_tags( $id );
     421        $tags = get_post_term_cache($id, 'post_tag');
     422        if ( false === $tags )
     423                $tags = get_object_terms($id, 'post_tag');
     424
    420425        $tags = apply_filters( 'get_the_tags', $tags );
    421426        if ( empty( $tags ) )
  • trunk/wp-includes/post.php

    r5592 r5598  
    16571657
    16581658function clean_post_cache($id) {
    1659         global $post_cache, $post_meta_cache, $category_cache, $tag_cache, $blog_id;
     1659        global $post_cache, $post_meta_cache, $post_term_cache, $blog_id;
    16601660
    16611661        if ( isset( $post_cache[$blog_id][$id] ) )
    … …  
    16651665                unset( $post_meta_cache[$blog_id][$id] );
    16661666
    1667         if ( isset( $category_cache[$blog_id][$id]) )
    1668                 unset ( $category_cache[$blog_id][$id] );
    1669 
    1670         if ( isset( $tag_cache[$blog_id][$id]) )
    1671                 unset ( $tag_cache[$blog_id][$id] );
     1667        if ( isset( $post_term_cache[$blog_id][$id]) )
     1668                unset ( $post_term_cache[$blog_id][$id] );
    16721669}
    16731670
    … …  
    16951692}
    16961693
    1697 function update_post_category_cache($post_ids) {
    1698         global $wpdb, $term_cache, $blog_id;
    1699         // TODO
    1700         return;
     1694function &get_post_term_cache($id, $taxonomy) {
     1695        global $post_term_cache, $blog_id;
     1696
     1697        if ( isset($post_term_cache[$blog_id][$id][$taxonomy]) )
     1698                return $post_term_cache[$blog_id][$id][$taxonomy];
     1699
     1700        return false;
     1701}
     1702
     1703// TODO abstract this to work for any object.
     1704function update_post_term_cache($post_ids) {
     1705        global $wpdb, $post_term_cache, $blog_id;
     1706
    17011707        if ( empty($post_ids) )
    17021708                return;
    … …  
    17091715        for ( $i = 0; $i < $count; $i++ ) {
    17101716                $post_id = (int) $post_id_array[ $i ];
    1711                 if ( isset( $term_cache[$blog_id][$post_id] ) ) {
     1717                if ( isset( $post_term_cache[$blog_id][$post_id] ) ) {
    17121718                        unset( $post_id_array[ $i ] );
    17131719                        continue;
    … …  
    17171723                return;
    17181724
    1719         $dogs = get_object_terms($post_id_array, array('category', 'post_tag'));
    1720 
    1721         if ( empty($dogs) )
     1725        $terms = get_object_terms($post_id_array, array('category', 'post_tag'), 'fields=all_with_object_id');
     1726
     1727        if ( empty($terms) )
    17221728                return;
    17231729
    1724         foreach ($dogs as $catt) {
    1725                 $term_cache[$blog_id][$catt->post_id][$catt->taxonomy][$catt->category_id] = &get_category($catt->category_id);
     1730        foreach ( $terms as $term )
     1731                $post_term_cache[$blog_id][$term->object_id][$term->taxonomy][$term->term_id] = $term;
     1732
     1733        foreach ( $post_id_array as $id ) {
     1734                if ( ! isset($post_term_cache[$blog_id][$id]) ) {
     1735                        $post_term_cache[$blog_id][$id]['category'] = array();
     1736                        $post_term_cache[$blog_id][$id]['post_tag'] = array();
     1737                }
    17261738        }
    17271739}
    … …  
    17431755        $post_id_list = implode(',', $post_id_array);
    17441756
    1745         update_post_category_cache($post_id_list);
     1757        update_post_term_cache($post_id_list);
    17461758
    17471759        update_postmeta_cache($post_id_list);
  • trunk/wp-includes/taxonomy.php

    r5597 r5598  
    429429
    430430        if ( 'all' == $fields )
    431                 $select_this = 't.*';
     431                $select_this = 't.*, tt.*';
    432432        else if ( 'ids' == $fields )
    433433                $select_this = 't.term_id';
     434        else if ( 'all_with_object_id' == $fields )
     435                $select_this = 't.*, tt.*, tr.object_id';
    434436
    435437        $query = "SELECT $select_this FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tr.object_id IN ($object_ids) ORDER BY $orderby $order";
    436438
    437         if ( 'all' == $fields )
    438                 $taxonomy_data = $wpdb->get_results($query);
    439         else if ( 'ids' == $fields )
    440                 $taxonomy_data = $wpdb->get_col($query);
    441         else if ( 'tt_ids' == $fields )
    442                 $taxonomy_data = $wpdb->get_col("SELECT tr.term_taxonomy_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tr.object_id IN ($object_ids) AND tt.taxonomy IN ($taxonomies) ORDER BY tr.term_taxonomy_id $order");
    443 
    444         if ( ! $taxonomy_data )
     439        if ( 'all' == $fields || 'all_with_object_id' == $fields ) {
     440                $terms = $wpdb->get_results($query);
     441                update_term_cache($terms);
     442        } else if ( 'ids' == $fields ) {
     443                $terms = $wpdb->get_col($query);
     444        } else if ( 'tt_ids' == $fields ) {
     445                $terms = $wpdb->get_col("SELECT tr.term_taxonomy_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tr.object_id IN ($object_ids) AND tt.taxonomy IN ($taxonomies) ORDER BY tr.term_taxonomy_id $order");
     446        }
     447
     448        if ( ! $terms )
    445449                return array();
    446450
    447         return $taxonomy_data;
     451        return $terms;
    448452}
    449453
    … …  
    554558        $query = "SELECT $select_this FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ($in_taxonomies) $where ORDER BY $orderby $order $number";
    555559
    556         if ( 'all' == $fields )
     560        if ( 'all' == $fields ) {
    557561                $terms = $wpdb->get_results($query);
    558         else if ( 'ids' == $fields )
     562                update_term_cache($terms);
     563        } else if ( 'ids' == $fields ) {
    559564                $terms = $wpdb->get_col($query);
     565        }
    560566
    561567        if ( empty($terms) )
    … …  
    591597
    592598        $cache[ $key ] = $terms;
    593         wp_cache_add( 'get_terms', $cache, 'term' );
     599        wp_cache_set( 'get_terms', $cache, 'term' );
    594600
    595601        $terms = apply_filters('get_terms', $terms, $taxonomies, $args);
    … …  
    680686}
    681687
     688function update_term_cache($terms, $taxonomy = '') {
     689        foreach ( $terms as $term ) {
     690                $term_taxonomy = $taxonomy;
     691                if ( empty($term_taxonomy) )
     692                        $term_taxonomy = $term->taxonomy;
     693
     694                wp_cache_add($term->term_id, $term, $term_taxonomy);
     695        }
     696}
     697
    682698function clean_term_cache($ids, $taxonomy) {
    683699        if ( !is_array($ids) )
Note: See TracChangeset for help on using the changeset viewer.