Make WordPress Core

Changeset 5616


Ignore:
Timestamp:
05/31/2007 09:38:33 PM (17 years ago)
Author:
ryan
Message:

Abstract object term cache a bit more. see #4189

Location:
trunk/wp-includes
Files:
3 edited

Legend:

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

    r5598 r5616  
    6767        $id = (int) $post->ID;
    6868
    69     $categories = get_post_term_cache($id, 'category');
     69    $categories = get_object_term_cache($id, 'category');
    7070    if ( false === $categories )
    7171        $categories = get_object_terms($id, 'category');
     
    419419        $id = (int) $post->ID;
    420420
    421     $tags = get_post_term_cache($id, 'post_tag');
     421    $tags = get_object_term_cache($id, 'post_tag');
    422422    if ( false === $tags )
    423423        $tags = get_object_terms($id, 'post_tag');
  • trunk/wp-includes/post.php

    r5598 r5616  
    16651665        unset( $post_meta_cache[$blog_id][$id] );
    16661666
    1667     if ( isset( $post_term_cache[$blog_id][$id]) )
    1668         unset ( $post_term_cache[$blog_id][$id] );
     1667    clean_object_term_cache($id, 'post');
    16691668}
    16701669
     
    16901689    wp_cache_delete( 'all_page_ids', 'pages' );
    16911690    wp_cache_delete( 'get_pages', 'page' );
    1692 }
    1693 
    1694 function &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.
    1704 function update_post_term_cache($post_ids) {
    1705     global $wpdb, $post_term_cache, $blog_id;
    1706 
    1707     if ( empty($post_ids) )
    1708         return;
    1709 
    1710     if ( is_array($post_ids) )
    1711         $post_id_list = implode(',', $post_ids);
    1712 
    1713     $post_id_array = (array) explode(',', $post_ids);
    1714     $count = count( $post_id_array);
    1715     for ( $i = 0; $i < $count; $i++ ) {
    1716         $post_id = (int) $post_id_array[ $i ];
    1717         if ( isset( $post_term_cache[$blog_id][$post_id] ) ) {
    1718             unset( $post_id_array[ $i ] );
    1719             continue;
    1720         }
    1721     }
    1722     if ( count( $post_id_array ) == 0 )
    1723         return;
    1724 
    1725     $terms = get_object_terms($post_id_array, array('category', 'post_tag'), 'fields=all_with_object_id');
    1726 
    1727     if ( empty($terms) )
    1728         return;
    1729 
    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         }
    1738     }
    17391691}
    17401692
     
    17551707    $post_id_list = implode(',', $post_id_array);
    17561708
    1757     update_post_term_cache($post_id_list);
     1709    update_object_term_cache($post_id_list, 'post');
    17581710
    17591711    update_postmeta_cache($post_id_list);
  • trunk/wp-includes/taxonomy.php

    r5613 r5616  
    400400}
    401401
     402function get_object_taxonomies($object_type) {
     403    global $wp_taxonomies;
     404
     405    $taxonomies = array();
     406    foreach ( $wp_taxonomies as $taxonomy ) {
     407        if ( $object_type == $taxonomy->object_type )
     408            $taxonomies[] = $taxonomy->name;
     409    }
     410
     411    return $taxonomies;
     412}
     413
    402414/**
    403415 * Returns the terms associated with the given object(s), in the supplied taxonomies.
     
    408420function get_object_terms($object_ids, $taxonomies, $args = array()) {
    409421    global $wpdb;
    410     error_log("Objects: " . var_export($object_ids, true), 0);
     422
    411423    if ( !is_array($taxonomies) )
    412424        $taxonomies = array($taxonomies);
     
    716728}
    717729
     730function clean_object_term_cache($object_ids, $object_type) {
     731    global $object_term_cache, $blog_id;
     732
     733    if ( !is_array($ids) )
     734        $ids = array($ids);
     735
     736    $taxonomies = get_object_taxonomies($object_type);
     737
     738    foreach ( $ids as $id ) {
     739        foreach ( $taxonomies as $taxonomy ) {
     740            if ( isset($object_term_cache[$blog_id][$id][$taxonomy]) )
     741                unset($object_term_cache[$blog_id][$id][$taxonomy]);
     742        }
     743    }
     744}
     745
     746function &get_object_term_cache($id, $taxonomy) {
     747    global $object_term_cache, $blog_id;
     748
     749    if ( isset($object_term_cache[$blog_id][$id][$taxonomy]) )
     750        return $object_term_cache[$blog_id][$id][$taxonomy];
     751
     752    if ( isset($object_term_cache[$blog_id][$id]) )
     753        return array();
     754
     755    return false;
     756}
     757
     758function update_object_term_cache($object_ids, $object_type) {
     759    global $wpdb, $object_term_cache, $blog_id;
     760
     761    if ( empty($object_ids) )
     762        return;
     763
     764    if ( !is_array($object_ids) )
     765        $object_ids = explode(',', $object_ids);
     766
     767    $count = count( $object_ids);
     768    for ( $i = 0; $i < $count; $i++ ) {
     769        $object_id = (int) $object_ids[ $i ];
     770        if ( isset( $object_term_cache[$blog_id][$object_id] ) ) {
     771            unset( $object_ids[ $i ] );
     772            continue;
     773        }
     774    }
     775
     776    if ( count( $object_ids ) == 0 )
     777        return;
     778
     779    $terms = get_object_terms($object_ids, get_object_taxonomies($object_type), 'fields=all_with_object_id');
     780
     781    if ( empty($terms) )
     782        return;
     783
     784    foreach ( $terms as $term )
     785        $object_term_cache[$blog_id][$term->object_id][$term->taxonomy][$term->term_id] = $term;
     786
     787    foreach ( $object_ids as $id ) {
     788        if ( ! isset($object_term_cache[$blog_id][$id]) )
     789                $object_term_cache[$blog_id][$id] = array();
     790    }
     791}
     792
    718793function _get_term_hierarchy($taxonomy) {
    719794    // TODO Make sure taxonomy is hierarchical
Note: See TracChangeset for help on using the changeset viewer.