Related to #5041, there is not a way to retrieve these dynamic transient names and use delete_transient, so if using object caching we must flush

This commit is contained in:
Mike Jolley 2014-03-20 11:20:54 +00:00
parent 981ea3734a
commit 2b5351ae95
1 changed files with 12 additions and 35 deletions

View File

@ -79,6 +79,11 @@ function wc_product_dimensions_enabled() {
function wc_delete_product_transients( $post_id = 0 ) {
global $wpdb;
if ( wp_using_ext_object_cache() ) {
wp_cache_flush(); // There isn't a reliable method of looking up the names, so flush the cache.
return;
}
$post_id = absint( $post_id );
// Clear core transients
@ -91,23 +96,10 @@ function wc_delete_product_transients( $post_id = 0 ) {
);
// Clear transients for which we don't have the name
if ( wp_using_ext_object_cache() ) {
global $wp_object_cache;
if ( isset( $wp_object_cache->cache['transient'] ) ) {
$keys = array_keys( $wp_object_cache->cache['transient'] );
foreach ( $keys as $key ) {
if ( strpos( $key, 'wc_uf_pid_' ) === 0 || strpos( $key, 'wc_ship_' ) === 0 || strpos( $key, 'wc_products_will_display_' ) === 0 || strpos( $key, 'wc_ln_count_' ) === 0 ) {
$transients_to_clear[] = $key;
}
}
}
} else {
$wpdb->query( "DELETE FROM `$wpdb->options` WHERE `option_name` LIKE ('_transient_wc_uf_pid_%') OR `option_name` LIKE ('_transient_timeout_wc_uf_pid_%')" );
$wpdb->query( "DELETE FROM `$wpdb->options` WHERE `option_name` LIKE ('_transient_wc_ln_count_%') OR `option_name` LIKE ('_transient_timeout_wc_ln_count_%')" );
$wpdb->query( "DELETE FROM `$wpdb->options` WHERE `option_name` LIKE ('_transient_wc_ship_%') OR `option_name` LIKE ('_transient_timeout_wc_ship_%')" );
$wpdb->query( "DELETE FROM `$wpdb->options` WHERE `option_name` LIKE ('_transient_wc_products_will_display_%') OR `option_name` LIKE ('_transient_timeout_wc_products_will_display_%')" );
}
// Clear product specific transients
$post_transient_names = array(
@ -121,28 +113,13 @@ function wc_delete_product_transients( $post_id = 0 ) {
foreach( $post_transient_names as $transient ) {
$transients_to_clear[] = $transient . $post_id;
}
} else {
if ( wp_using_ext_object_cache() ) {
global $wp_object_cache;
if ( isset( $wp_object_cache->cache['transient'] ) ) {
$keys = array_keys( $wp_object_cache->cache['transient'] );
foreach( $post_transient_names as $transient ) {
foreach ( $keys as $key ) {
if ( strpos( $key, $transient ) === 0 ) {
$transients_to_clear[] = $key;
}
}
}
}
} else {
foreach( $post_transient_names as $transient ) {
$wpdb->query( $wpdb->prepare( "DELETE FROM `$wpdb->options` WHERE `option_name` LIKE %s OR `option_name` LIKE %s", '_transient_' . $transient . '%', '_transient_timeout_' . $transient . '%' ) );
}
}
}
// Clear transients where we have names
// Delete transients
foreach( $transients_to_clear as $transient ) {
delete_transient( $transient );
}