Make sure term cache is cleared when updating term counts.
git-svn-id: http://svn.automattic.com/wordpress/trunk@5983 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
b92227412a
commit
56dd1d2033
|
@ -640,8 +640,6 @@ function wp_delete_object_term_relationships( $object_id, $taxonomies ) {
|
||||||
$wpdb->query("DELETE FROM $wpdb->term_relationships WHERE object_id = '$object_id' AND term_taxonomy_id IN ($in_terms)");
|
$wpdb->query("DELETE FROM $wpdb->term_relationships WHERE object_id = '$object_id' AND term_taxonomy_id IN ($in_terms)");
|
||||||
wp_update_term_count($terms, $taxonomy);
|
wp_update_term_count($terms, $taxonomy);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO clear the cache
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -870,9 +868,6 @@ function wp_set_object_terms($object_id, $terms, $taxonomy, $append = false) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO clean old_terms. Need term_id instead of tt_id
|
|
||||||
clean_term_cache($term_ids, $taxonomy);
|
|
||||||
|
|
||||||
return $tt_ids;
|
return $tt_ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -949,15 +944,19 @@ function wp_update_term_count( $terms, $taxonomy ) {
|
||||||
$terms = array_map('intval', $terms);
|
$terms = array_map('intval', $terms);
|
||||||
|
|
||||||
$taxonomy = get_taxonomy($taxonomy);
|
$taxonomy = get_taxonomy($taxonomy);
|
||||||
if ( !empty($taxonomy->update_count_callback) )
|
if ( !empty($taxonomy->update_count_callback) ) {
|
||||||
return call_user_func($taxonomy->update_count_callback, $terms);
|
call_user_func($taxonomy->update_count_callback, $terms);
|
||||||
|
} else {
|
||||||
|
// Default count updater
|
||||||
|
foreach ($terms as $term) {
|
||||||
|
$count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = '$term'");
|
||||||
|
$wpdb->query("UPDATE $wpdb->term_taxonomy SET count = '$count' WHERE term_taxonomy_id = '$term'");
|
||||||
|
}
|
||||||
|
|
||||||
// Default count updater
|
|
||||||
foreach ($terms as $term) {
|
|
||||||
$count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = '$term'");
|
|
||||||
$wpdb->query("UPDATE $wpdb->term_taxonomy SET count = '$count' WHERE term_taxonomy_id = '$term'");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clean_term_cache($terms);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -981,17 +980,35 @@ function clean_object_term_cache($object_ids, $object_type) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function clean_term_cache($ids, $taxonomy) {
|
function clean_term_cache($ids, $taxonomy = '') {
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
if ( !is_array($ids) )
|
if ( !is_array($ids) )
|
||||||
$ids = array($ids);
|
$ids = array($ids);
|
||||||
|
|
||||||
foreach ( $ids as $id ) {
|
$taxonomies = array();
|
||||||
wp_cache_delete($id, $taxonomy);
|
// If no taxonomy, assume tt_ids.
|
||||||
|
if ( empty($taxonomy) ) {
|
||||||
|
$tt_ids = implode(', ', $ids);
|
||||||
|
$terms = $wpdb->get_results("SELECT term_id, taxonomy FROM $wpdb->term_taxonomy WHERE term_taxonomy_id IN ($tt_ids)");
|
||||||
|
foreach ( (array) $terms as $term ) {
|
||||||
|
$taxonomies[] = $term->taxonomy;
|
||||||
|
wp_cache_delete($term->term_id, $term->taxonomy);
|
||||||
|
}
|
||||||
|
$taxonomies = array_unique($taxonomies);
|
||||||
|
} else {
|
||||||
|
foreach ( $ids as $id ) {
|
||||||
|
wp_cache_delete($id, $taxonomy);
|
||||||
|
}
|
||||||
|
$taxonomies = array($taxonomy);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ( $taxonomies as $taxonomy ) {
|
||||||
|
wp_cache_delete('all_ids', $taxonomy);
|
||||||
|
wp_cache_delete('get', $taxonomy);
|
||||||
|
delete_option("{$taxonomy}_children");
|
||||||
}
|
}
|
||||||
|
|
||||||
wp_cache_delete('all_ids', $taxonomy);
|
|
||||||
wp_cache_delete('get', $taxonomy);
|
|
||||||
delete_option("{$taxonomy}_children");
|
|
||||||
wp_cache_delete('get_terms', 'terms');
|
wp_cache_delete('get_terms', 'terms');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue