Invalidate cache for child terms when parent term is deleted.
Props socki03. Fixes #29911. git-svn-id: https://develop.svn.wordpress.org/trunk@29945 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
297f2c78c5
commit
c2bea27bfd
@ -2414,7 +2414,8 @@ function wp_delete_term( $term, $taxonomy, $args = array() ) {
|
|||||||
return $term_obj;
|
return $term_obj;
|
||||||
$parent = $term_obj->parent;
|
$parent = $term_obj->parent;
|
||||||
|
|
||||||
$edit_tt_ids = $wpdb->get_col( "SELECT `term_taxonomy_id` FROM $wpdb->term_taxonomy WHERE `parent` = " . (int)$term_obj->term_id );
|
$edit_ids = $wpdb->get_results( "SELECT term_id, term_taxonomy_id FROM $wpdb->term_taxonomy WHERE `parent` = " . (int)$term_obj->term_id );
|
||||||
|
$edit_tt_ids = wp_list_pluck( $edit_ids, 'term_taxonomy_id' );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires immediately before a term to delete's children are reassigned a parent.
|
* Fires immediately before a term to delete's children are reassigned a parent.
|
||||||
@ -2426,6 +2427,10 @@ function wp_delete_term( $term, $taxonomy, $args = array() ) {
|
|||||||
do_action( 'edit_term_taxonomies', $edit_tt_ids );
|
do_action( 'edit_term_taxonomies', $edit_tt_ids );
|
||||||
$wpdb->update( $wpdb->term_taxonomy, compact( 'parent' ), array( 'parent' => $term_obj->term_id) + compact( 'taxonomy' ) );
|
$wpdb->update( $wpdb->term_taxonomy, compact( 'parent' ), array( 'parent' => $term_obj->term_id) + compact( 'taxonomy' ) );
|
||||||
|
|
||||||
|
// Clean the cache for all child terms.
|
||||||
|
$edit_term_ids = wp_list_pluck( $edit_ids, 'term_id' );
|
||||||
|
clean_term_cache( $edit_term_ids, $taxonomy );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires immediately after a term to delete's children are reassigned a parent.
|
* Fires immediately after a term to delete's children are reassigned a parent.
|
||||||
*
|
*
|
||||||
|
@ -1006,6 +1006,33 @@ class Tests_Term extends WP_UnitTestCase {
|
|||||||
$this->assertTrue( in_array( $found['term_id'], $cached_children[ $t2 ] ) );
|
$this->assertTrue( in_array( $found['term_id'], $cached_children[ $t2 ] ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 29911
|
||||||
|
*/
|
||||||
|
public function test_wp_delete_term_should_invalidate_cache_for_child_terms() {
|
||||||
|
register_taxonomy( 'wptests_tax', 'post', array(
|
||||||
|
'hierarchical' => true,
|
||||||
|
) );
|
||||||
|
|
||||||
|
$parent = $this->factory->term->create( array(
|
||||||
|
'taxonomy' => 'wptests_tax',
|
||||||
|
) );
|
||||||
|
|
||||||
|
$child = $this->factory->term->create( array(
|
||||||
|
'taxonomy' => 'wptests_tax',
|
||||||
|
'parent' => $parent,
|
||||||
|
'slug' => 'foo',
|
||||||
|
) );
|
||||||
|
|
||||||
|
// Prime the cache.
|
||||||
|
$child_term = get_term( $child, 'wptests_tax' );
|
||||||
|
$this->assertSame( $parent, $child_term->parent );
|
||||||
|
|
||||||
|
wp_delete_term( $parent, 'wptests_tax' );
|
||||||
|
$child_term = get_term( $child, 'wptests_tax' );
|
||||||
|
$this->assertSame( 0, $child_term->parent );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ticket 5381
|
* @ticket 5381
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user