<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<title>[12881] trunk/wp-includes:
Change back to an option so that it is always there and regenerate it after cleaning the cache instead of waiting for the next page load
.</title>
</head>
<body>
<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.wordpress.org/changeset/12881">12881</a></dd>
<dt>Author</dt> <dd>ryan</dd>
<dt>Date</dt> <dd>2010-01-27 19:42:23 +0000 (Wed, 27 Jan 2010)</dd>
</dl>
<h3>Log Message</h3>
<pre>Change back to an option so that it is always there and regenerate it after cleaning the cache instead of waiting for the next page load. Don't clean taxonomy wide caches when just updating object counts to avoid cleaning when updating a post.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkwpincludespostphp">trunk/wp-includes/post.php</a></li>
<li><a href="#trunkwpincludestaxonomyphp">trunk/wp-includes/taxonomy.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkwpincludespostphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/post.php (12880 => 12881)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/post.php        2010-01-27 19:13:00 UTC (rev 12880)
+++ trunk/wp-includes/post.php        2010-01-27 19:42:23 UTC (rev 12881)
</span><span class="lines">@@ -2043,9 +2043,8 @@
</span><span class="cx">                 wp_set_post_tags( $post_ID, $tags_input );
</span><span class="cx">         // new-style support for all tag-like taxonomies
</span><span class="cx">         if ( !empty($tax_input) ) {
</span><del>-                foreach ( $tax_input as $taxonomy => $tags ) {
</del><ins>+                foreach ( $tax_input as $taxonomy => $tags )
</ins><span class="cx">                         wp_set_post_terms( $post_ID, $tags, $taxonomy );
</span><del>-                }
</del><span class="cx">         }
</span><span class="cx">
</span><span class="cx">         $current_guid = get_post_field( 'guid', $post_ID );
</span></span></pre></div>
<a id="trunkwpincludestaxonomyphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/taxonomy.php (12880 => 12881)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/taxonomy.php        2010-01-27 19:13:00 UTC (rev 12880)
+++ trunk/wp-includes/taxonomy.php        2010-01-27 19:42:23 UTC (rev 12881)
</span><span class="lines">@@ -1867,7 +1867,7 @@
</span><span class="cx">
</span><span class="cx">         }
</span><span class="cx">
</span><del>-        clean_term_cache($terms);
</del><ins>+        clean_term_cache($terms, '', false);
</ins><span class="cx">
</span><span class="cx">         return true;
</span><span class="cx"> }
</span><span class="lines">@@ -1917,8 +1917,9 @@
</span><span class="cx"> *
</span><span class="cx"> * @param int|array $ids Single or list of Term IDs
</span><span class="cx"> * @param string $taxonomy Can be empty and will assume tt_ids, else will use for context.
</span><ins>+ * @param bool $clean_taxonomy Whether to clean taxonomy wide caches (true), or just individual term object caches (false). Default is true.
</ins><span class="cx"> */
</span><del>-function clean_term_cache($ids, $taxonomy = '') {
</del><ins>+function clean_term_cache($ids, $taxonomy = '', $clean_taxonomy = true) {
</ins><span class="cx">         global $wpdb;
</span><span class="cx">         static $cleaned = array();
</span><span class="cx">
</span><span class="lines">@@ -1951,9 +1952,15 @@
</span><span class="cx">                 if ( isset($cleaned[$taxonomy]) )
</span><span class="cx">                         continue;
</span><span class="cx">                 $cleaned[$taxonomy] = true;
</span><del>-                wp_cache_delete('all_ids', $taxonomy);
-                wp_cache_delete('get', $taxonomy);
-                delete_transient("{$taxonomy}_children");
</del><ins>+
+                if ( $clean_taxonomy ) {
+                        wp_cache_delete('all_ids', $taxonomy);
+                        wp_cache_delete('get', $taxonomy);
+                        delete_option("{$taxonomy}_children");
+                        // Regenerate {$taxonomy}_children
+                        _get_term_hierarchy($taxonomy);
+                }
+
</ins><span class="cx">                 do_action('clean_term_cache', $ids, $taxonomy);
</span><span class="cx">         }
</span><span class="cx">
</span><span class="lines">@@ -2092,17 +2099,17 @@
</span><span class="cx"> function _get_term_hierarchy($taxonomy) {
</span><span class="cx">         if ( !is_taxonomy_hierarchical($taxonomy) )
</span><span class="cx">                 return array();
</span><del>-        $children = get_transient("{$taxonomy}_children");
</del><ins>+        $children = get_option("{$taxonomy}_children");
+
</ins><span class="cx">         if ( is_array($children) )
</span><span class="cx">                 return $children;
</span><del>-
</del><span class="cx">         $children = array();
</span><span class="cx">         $terms = get_terms($taxonomy, array('get' => 'all', 'orderby' => 'id', 'fields' => 'id=>parent'));
</span><span class="cx">         foreach ( $terms as $term_id => $parent ) {
</span><span class="cx">                 if ( $parent > 0 )
</span><span class="cx">                         $children[$parent][] = $term_id;
</span><span class="cx">         }
</span><del>-        set_transient("{$taxonomy}_children", $children);
</del><ins>+        update_option("{$taxonomy}_children", $children);
</ins><span class="cx">
</span><span class="cx">         return $children;
</span><span class="cx"> }
</span></span></pre>
</div>
</div>
</body>
</html>