Make WordPress Core

Changeset 5555


Ignore:
Timestamp:
05/26/2007 11:32:06 PM (19 years ago)
Author:
ryan
Message:

Term cache work. see #4189

Location:
trunk/wp-includes
Files:
4 edited

Legend:

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

    r5553 r5555  
    123123}
    124124
     125//
     126// Cache
     127//
     128
     129function update_category_cache() {
     130        return true;
     131}
     132
     133function clean_category_cache($id) {
     134        clean_term_cache($id, 'category');
     135}
     136
    125137?>
  • trunk/wp-includes/functions.php

    r5541 r5555  
    115115        $week['end'] = $week['start'] + 604799;
    116116        return $week;
    117 }
    118 
    119 function get_lastpostdate($timezone = 'server') {
    120         global $cache_lastpostdate, $pagenow, $wpdb, $blog_id;
    121         $add_seconds_blog = get_option('gmt_offset') * 3600;
    122         $add_seconds_server = date('Z');
    123         if ( !isset($cache_lastpostdate[$blog_id][$timezone]) ) {
    124                 switch(strtolower($timezone)) {
    125                         case 'gmt':
    126                                 $lastpostdate = $wpdb->get_var("SELECT post_date_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1");
    127                                 break;
    128                         case 'blog':
    129                                 $lastpostdate = $wpdb->get_var("SELECT post_date FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1");
    130                                 break;
    131                         case 'server':
    132                                 $lastpostdate = $wpdb->get_var("SELECT DATE_ADD(post_date_gmt, INTERVAL '$add_seconds_server' SECOND) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1");
    133                                 break;
    134                 }
    135                 $cache_lastpostdate[$blog_id][$timezone] = $lastpostdate;
    136         } else {
    137                 $lastpostdate = $cache_lastpostdate[$blog_id][$timezone];
    138         }
    139         return $lastpostdate;
    140 }
    141 
    142 function get_lastpostmodified($timezone = 'server') {
    143         global $cache_lastpostmodified, $pagenow, $wpdb, $blog_id;
    144         $add_seconds_blog = get_option('gmt_offset') * 3600;
    145         $add_seconds_server = date('Z');
    146         if ( !isset($cache_lastpostmodified[$blog_id][$timezone]) ) {
    147                 switch(strtolower($timezone)) {
    148                         case 'gmt':
    149                                 $lastpostmodified = $wpdb->get_var("SELECT post_modified_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1");
    150                                 break;
    151                         case 'blog':
    152                                 $lastpostmodified = $wpdb->get_var("SELECT post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1");
    153                                 break;
    154                         case 'server':
    155                                 $lastpostmodified = $wpdb->get_var("SELECT DATE_ADD(post_modified_gmt, INTERVAL '$add_seconds_server' SECOND) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1");
    156                                 break;
    157                 }
    158                 $lastpostdate = get_lastpostdate($timezone);
    159                 if ( $lastpostdate > $lastpostmodified ) {
    160                         $lastpostmodified = $lastpostdate;
    161                 }
    162                 $cache_lastpostmodified[$blog_id][$timezone] = $lastpostmodified;
    163         } else {
    164                 $lastpostmodified = $cache_lastpostmodified[$blog_id][$timezone];
    165         }
    166         return $lastpostmodified;
    167117}
    168118
     
    599549                return(0);
    600550        }
    601 }
    602 
    603 function update_post_cache(&$posts) {
    604         global $post_cache, $blog_id;
    605 
    606         if ( !$posts )
    607                 return;
    608 
    609         for ($i = 0; $i < count($posts); $i++) {
    610                 $post_cache[$blog_id][$posts[$i]->ID] = &$posts[$i];
    611         }
    612 }
    613 
    614 function clean_post_cache($id) {
    615         global $post_cache, $post_meta_cache, $category_cache, $tag_cache, $blog_id;
    616 
    617         if ( isset( $post_cache[$blog_id][$id] ) )
    618                 unset( $post_cache[$blog_id][$id] );
    619 
    620         if ( isset ($post_meta_cache[$blog_id][$id] ) )
    621                 unset( $post_meta_cache[$blog_id][$id] );
    622 
    623         if ( isset( $category_cache[$blog_id][$id]) )
    624                 unset ( $category_cache[$blog_id][$id] );
    625 
    626         if ( isset( $tag_cache[$blog_id][$id]) )
    627                 unset ( $tag_cache[$blog_id][$id] );
    628 }
    629 
    630 function update_page_cache(&$pages) {
    631         global $page_cache, $blog_id;
    632 
    633         if ( !$pages )
    634                 return;
    635 
    636         for ($i = 0; $i < count($pages); $i++) {
    637                 $page_cache[$blog_id][$pages[$i]->ID] = &$pages[$i];
    638                 wp_cache_add($pages[$i]->ID, $pages[$i], 'pages');
    639         }
    640 }
    641 
    642 function clean_page_cache($id) {
    643         global $page_cache, $blog_id;
    644 
    645         if ( isset( $page_cache[$blog_id][$id] ) )
    646                 unset( $page_cache[$blog_id][$id] );
    647 
    648         wp_cache_delete($id, 'pages');
    649         wp_cache_delete( 'all_page_ids', 'pages' );
    650         wp_cache_delete( 'get_pages', 'page' );
    651 }
    652 
    653 function update_post_category_cache($post_ids) {
    654         global $wpdb, $category_cache, $tag_cache, $blog_id;
    655         // TODO
    656         return;
    657         if ( empty($post_ids) )
    658                 return;
    659 
    660         if ( is_array($post_ids) )
    661                 $post_id_list = implode(',', $post_ids);
    662 
    663         $post_id_array = (array) explode(',', $post_ids);
    664         $count = count( $post_id_array);
    665         for ( $i = 0; $i < $count; $i++ ) {
    666                 $post_id = (int) $post_id_array[ $i ];
    667                 if ( isset( $category_cache[$blog_id][$post_id] ) ) {
    668                         unset( $post_id_array[ $i ] );
    669                         continue;
    670                 }
    671         }
    672         if ( count( $post_id_array ) == 0 )
    673                 return;
    674         $post_id_list = join( ',', $post_id_array ); // with already cached stuff removed
    675 
    676         $dogs = $wpdb->get_results("SELECT post_id, category_id, rel_type FROM $wpdb->post2cat WHERE post_id IN ($post_id_list)");
    677 
    678         if ( empty($dogs) )
    679                 return;
    680 
    681         foreach ($dogs as $catt) {
    682                 if ( 'category' == $catt->rel_type )
    683                         $category_cache[$blog_id][$catt->post_id][$catt->category_id] = &get_category($catt->category_id);
    684                 elseif ( 'tag' == $catt->rel_type )
    685                         $tag_cache[$blog_id][$catt->post_id][$catt->category_id] = &get_category($catt->category_id);
    686         }
    687 }
    688 
    689 function update_post_caches(&$posts) {
    690         global $post_cache, $category_cache, $post_meta_cache, $tag_cache;
    691         global $wpdb, $blog_id;
    692 
    693         // No point in doing all this work if we didn't match any posts.
    694         if ( !$posts )
    695                 return;
    696 
    697         // Get the categories for all the posts
    698         for ($i = 0; $i < count($posts); $i++) {
    699                 $post_id_array[] = $posts[$i]->ID;
    700                 $post_cache[$blog_id][$posts[$i]->ID] = &$posts[$i];
    701         }
    702 
    703         $post_id_list = implode(',', $post_id_array);
    704 
    705         update_post_category_cache($post_id_list);
    706 
    707         update_postmeta_cache($post_id_list);
    708 }
    709 
    710 function update_postmeta_cache($post_id_list = '') {
    711         global $wpdb, $post_meta_cache, $blog_id;
    712 
    713         // We should validate this comma-separated list for the upcoming SQL query
    714         $post_id_list = preg_replace('|[^0-9,]|', '', $post_id_list);
    715 
    716         if ( empty( $post_id_list ) )
    717                 return false;
    718 
    719         // we're marking each post as having its meta cached (with no keys... empty array), to prevent posts with no meta keys from being queried again
    720         // any posts that DO have keys will have this empty array overwritten with a proper array, down below
    721         $post_id_array = (array) explode(',', $post_id_list);
    722         $count = count( $post_id_array);
    723         for ( $i = 0; $i < $count; $i++ ) {
    724                 $post_id = (int) $post_id_array[ $i ];
    725                 if ( isset( $post_meta_cache[$blog_id][$post_id] ) ) { // If the meta is already cached
    726                         unset( $post_id_array[ $i ] );
    727                         continue;
    728                 }
    729                 $post_meta_cache[$blog_id][$post_id] = array();
    730         }
    731         if ( count( $post_id_array ) == 0 )
    732                 return;
    733         $post_id_list = join( ',', $post_id_array ); // with already cached stuff removeds
    734 
    735         // Get post-meta info
    736         if ( $meta_list = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id IN($post_id_list) ORDER BY post_id, meta_key", ARRAY_A) ) {
    737                 // Change from flat structure to hierarchical:
    738                 if ( !isset($post_meta_cache) )
    739                         $post_meta_cache[$blog_id] = array();
    740 
    741                 foreach ($meta_list as $metarow) {
    742                         $mpid = (int) $metarow['post_id'];
    743                         $mkey = $metarow['meta_key'];
    744                         $mval = $metarow['meta_value'];
    745 
    746                         // Force subkeys to be array type:
    747                         if ( !isset($post_meta_cache[$blog_id][$mpid]) || !is_array($post_meta_cache[$blog_id][$mpid]) )
    748                                 $post_meta_cache[$blog_id][$mpid] = array();
    749                         if ( !isset($post_meta_cache[$blog_id][$mpid]["$mkey"]) || !is_array($post_meta_cache[$blog_id][$mpid]["$mkey"]) )
    750                                 $post_meta_cache[$blog_id][$mpid]["$mkey"] = array();
    751 
    752                         // Add a value to the current pid/key:
    753                         $post_meta_cache[$blog_id][$mpid][$mkey][] = $mval;
    754                 }
    755         }
    756 }
    757 
    758 function update_category_cache() {
    759         return true;
    760 }
    761 
    762 function clean_category_cache($id) {
    763         wp_cache_delete($id, 'category');
    764         wp_cache_delete('all_category_ids', 'category');
    765         wp_cache_delete('get_categories', 'category');
    766         delete_option('category_children');
    767551}
    768552
  • trunk/wp-includes/post.php

    r5553 r5555  
    413413        if ( 'publish' == $post->post_status && 'post' == $post->post_type ) {
    414414                $categories = wp_get_post_categories($post->ID);
    415                 if( is_array( $categories ) ) {
     415                if ( is_array( $categories ) ) {
    416416                        foreach ( $categories as $cat_id ) {
    417417                                $wpdb->query("UPDATE $wpdb->categories SET category_count = category_count - 1 WHERE cat_ID = '$cat_id'");
     
    15951595}
    15961596
     1597function get_lastpostdate($timezone = 'server') {
     1598        global $cache_lastpostdate, $pagenow, $wpdb, $blog_id;
     1599        $add_seconds_blog = get_option('gmt_offset') * 3600;
     1600        $add_seconds_server = date('Z');
     1601        if ( !isset($cache_lastpostdate[$blog_id][$timezone]) ) {
     1602                switch(strtolower($timezone)) {
     1603                        case 'gmt':
     1604                                $lastpostdate = $wpdb->get_var("SELECT post_date_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1");
     1605                                break;
     1606                        case 'blog':
     1607                                $lastpostdate = $wpdb->get_var("SELECT post_date FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1");
     1608                                break;
     1609                        case 'server':
     1610                                $lastpostdate = $wpdb->get_var("SELECT DATE_ADD(post_date_gmt, INTERVAL '$add_seconds_server' SECOND) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1");
     1611                                break;
     1612                }
     1613                $cache_lastpostdate[$blog_id][$timezone] = $lastpostdate;
     1614        } else {
     1615                $lastpostdate = $cache_lastpostdate[$blog_id][$timezone];
     1616        }
     1617        return $lastpostdate;
     1618}
     1619
     1620function get_lastpostmodified($timezone = 'server') {
     1621        global $cache_lastpostmodified, $pagenow, $wpdb, $blog_id;
     1622        $add_seconds_blog = get_option('gmt_offset') * 3600;
     1623        $add_seconds_server = date('Z');
     1624        if ( !isset($cache_lastpostmodified[$blog_id][$timezone]) ) {
     1625                switch(strtolower($timezone)) {
     1626                        case 'gmt':
     1627                                $lastpostmodified = $wpdb->get_var("SELECT post_modified_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1");
     1628                                break;
     1629                        case 'blog':
     1630                                $lastpostmodified = $wpdb->get_var("SELECT post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1");
     1631                                break;
     1632                        case 'server':
     1633                                $lastpostmodified = $wpdb->get_var("SELECT DATE_ADD(post_modified_gmt, INTERVAL '$add_seconds_server' SECOND) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1");
     1634                                break;
     1635                }
     1636                $lastpostdate = get_lastpostdate($timezone);
     1637                if ( $lastpostdate > $lastpostmodified ) {
     1638                        $lastpostmodified = $lastpostdate;
     1639                }
     1640                $cache_lastpostmodified[$blog_id][$timezone] = $lastpostmodified;
     1641        } else {
     1642                $lastpostmodified = $cache_lastpostmodified[$blog_id][$timezone];
     1643        }
     1644        return $lastpostmodified;
     1645}
     1646
     1647//
     1648// Cache
     1649//
     1650
     1651function update_post_cache(&$posts) {
     1652        global $post_cache, $blog_id;
     1653
     1654        if ( !$posts )
     1655                return;
     1656
     1657        for ($i = 0; $i < count($posts); $i++) {
     1658                $post_cache[$blog_id][$posts[$i]->ID] = &$posts[$i];
     1659        }
     1660}
     1661
     1662function clean_post_cache($id) {
     1663        global $post_cache, $post_meta_cache, $category_cache, $tag_cache, $blog_id;
     1664
     1665        if ( isset( $post_cache[$blog_id][$id] ) )
     1666                unset( $post_cache[$blog_id][$id] );
     1667
     1668        if ( isset ($post_meta_cache[$blog_id][$id] ) )
     1669                unset( $post_meta_cache[$blog_id][$id] );
     1670
     1671        if ( isset( $category_cache[$blog_id][$id]) )
     1672                unset ( $category_cache[$blog_id][$id] );
     1673
     1674        if ( isset( $tag_cache[$blog_id][$id]) )
     1675                unset ( $tag_cache[$blog_id][$id] );
     1676}
     1677
     1678function update_page_cache(&$pages) {
     1679        global $page_cache, $blog_id;
     1680
     1681        if ( !$pages )
     1682                return;
     1683
     1684        for ($i = 0; $i < count($pages); $i++) {
     1685                $page_cache[$blog_id][$pages[$i]->ID] = &$pages[$i];
     1686                wp_cache_add($pages[$i]->ID, $pages[$i], 'pages');
     1687        }
     1688}
     1689
     1690function clean_page_cache($id) {
     1691        global $page_cache, $blog_id;
     1692
     1693        if ( isset( $page_cache[$blog_id][$id] ) )
     1694                unset( $page_cache[$blog_id][$id] );
     1695
     1696        wp_cache_delete($id, 'pages');
     1697        wp_cache_delete( 'all_page_ids', 'pages' );
     1698        wp_cache_delete( 'get_pages', 'page' );
     1699}
     1700
     1701function update_post_category_cache($post_ids) {
     1702        global $wpdb, $category_cache, $tag_cache, $blog_id;
     1703        // TODO
     1704        return;
     1705        if ( empty($post_ids) )
     1706                return;
     1707
     1708        if ( is_array($post_ids) )
     1709                $post_id_list = implode(',', $post_ids);
     1710
     1711        $post_id_array = (array) explode(',', $post_ids);
     1712        $count = count( $post_id_array);
     1713        for ( $i = 0; $i < $count; $i++ ) {
     1714                $post_id = (int) $post_id_array[ $i ];
     1715                if ( isset( $category_cache[$blog_id][$post_id] ) ) {
     1716                        unset( $post_id_array[ $i ] );
     1717                        continue;
     1718                }
     1719        }
     1720        if ( count( $post_id_array ) == 0 )
     1721                return;
     1722        $post_id_list = join( ',', $post_id_array ); // with already cached stuff removed
     1723
     1724        $dogs = $wpdb->get_results("SELECT post_id, category_id, rel_type FROM $wpdb->post2cat WHERE post_id IN ($post_id_list)");
     1725
     1726        if ( empty($dogs) )
     1727                return;
     1728
     1729        foreach ($dogs as $catt) {
     1730                if ( 'category' == $catt->rel_type )
     1731                        $category_cache[$blog_id][$catt->post_id][$catt->category_id] = &get_category($catt->category_id);
     1732                elseif ( 'tag' == $catt->rel_type )
     1733                        $tag_cache[$blog_id][$catt->post_id][$catt->category_id] = &get_category($catt->category_id);
     1734        }
     1735}
     1736
     1737function update_post_caches(&$posts) {
     1738        global $post_cache, $category_cache, $post_meta_cache, $tag_cache;
     1739        global $wpdb, $blog_id;
     1740
     1741        // No point in doing all this work if we didn't match any posts.
     1742        if ( !$posts )
     1743                return;
     1744
     1745        // Get the categories for all the posts
     1746        for ($i = 0; $i < count($posts); $i++) {
     1747                $post_id_array[] = $posts[$i]->ID;
     1748                $post_cache[$blog_id][$posts[$i]->ID] = &$posts[$i];
     1749        }
     1750
     1751        $post_id_list = implode(',', $post_id_array);
     1752
     1753        update_post_category_cache($post_id_list);
     1754
     1755        update_postmeta_cache($post_id_list);
     1756}
     1757
     1758function update_postmeta_cache($post_id_list = '') {
     1759        global $wpdb, $post_meta_cache, $blog_id;
     1760
     1761        // We should validate this comma-separated list for the upcoming SQL query
     1762        $post_id_list = preg_replace('|[^0-9,]|', '', $post_id_list);
     1763
     1764        if ( empty( $post_id_list ) )
     1765                return false;
     1766
     1767        // we're marking each post as having its meta cached (with no keys... empty array), to prevent posts with no meta keys from being queried again
     1768        // any posts that DO have keys will have this empty array overwritten with a proper array, down below
     1769        $post_id_array = (array) explode(',', $post_id_list);
     1770        $count = count( $post_id_array);
     1771        for ( $i = 0; $i < $count; $i++ ) {
     1772                $post_id = (int) $post_id_array[ $i ];
     1773                if ( isset( $post_meta_cache[$blog_id][$post_id] ) ) { // If the meta is already cached
     1774                        unset( $post_id_array[ $i ] );
     1775                        continue;
     1776                }
     1777                $post_meta_cache[$blog_id][$post_id] = array();
     1778        }
     1779        if ( count( $post_id_array ) == 0 )
     1780                return;
     1781        $post_id_list = join( ',', $post_id_array ); // with already cached stuff removeds
     1782
     1783        // Get post-meta info
     1784        if ( $meta_list = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id IN($post_id_list) ORDER BY post_id, meta_key", ARRAY_A) ) {
     1785                // Change from flat structure to hierarchical:
     1786                if ( !isset($post_meta_cache) )
     1787                        $post_meta_cache[$blog_id] = array();
     1788
     1789                foreach ($meta_list as $metarow) {
     1790                        $mpid = (int) $metarow['post_id'];
     1791                        $mkey = $metarow['meta_key'];
     1792                        $mval = $metarow['meta_value'];
     1793
     1794                        // Force subkeys to be array type:
     1795                        if ( !isset($post_meta_cache[$blog_id][$mpid]) || !is_array($post_meta_cache[$blog_id][$mpid]) )
     1796                                $post_meta_cache[$blog_id][$mpid] = array();
     1797                        if ( !isset($post_meta_cache[$blog_id][$mpid]["$mkey"]) || !is_array($post_meta_cache[$blog_id][$mpid]["$mkey"]) )
     1798                                $post_meta_cache[$blog_id][$mpid]["$mkey"] = array();
     1799
     1800                        // Add a value to the current pid/key:
     1801                        $post_meta_cache[$blog_id][$mpid][$mkey][] = $mval;
     1802                }
     1803        }
     1804}
     1805
    15971806?>
  • trunk/wp-includes/taxonomy.php

    r5553 r5555  
    9696        $term_id = apply_filters('term_id_filter', $term_id, $tt_id);
    9797
    98         //clean_term_cache($term_id);
     98        clean_term_cache($term_id, $taxonomy);
    9999
    100100        do_action("created_term", $term_id, $tt_id);
     
    147147        $wpdb->query("DELETE FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = '$tt_id'");
    148148
    149         //clean_term_cache($term, $taxonomy);
     149        clean_term_cache($term, $taxonomy);
     150
    150151        do_action("delete_$taxonomy", $term, $tt_id);
    151152
     
    210211        $term_id = apply_filters('term_id_filter', $term_id, $tt_id);
    211212
    212         //clean_term_cache($term_id);
     213        clean_term_cache($term_id, $taxonomy);
    213214
    214215        do_action("edited_term", $term_id, $tt_id);
     
    510511
    511512        $cache[ $key ] = $terms;
    512         wp_cache_add( 'get_terms', $cache, 'terms' );
     513        wp_cache_add( 'get_terms', $cache, 'term' );
    513514
    514515        $terms = apply_filters('get_terms', $terms, $taxonomies, $args);
     
    583584}
    584585
     586function clean_term_cache($id, $taxonomy) {
     587        wp_cache_delete($id, $taxonomy);
     588        wp_cache_delete('all_ids', $taxonomy);
     589        wp_cache_delete('get', $taxonomy);
     590        delete_option("{$taxonomy}_children");
     591        wp_cache_delete('get_terms', 'terms');
     592}
     593
    585594function _get_term_hierarchy($taxonomy) {
    586595        // TODO Make sure taxonomy is hierarchical
Note: See TracChangeset for help on using the changeset viewer.