Taxonomy: Use get_terms instead of a database lookup in term_exists().

Replace raw SQL queries to the terms table, with a call to the `get_terms` function. Using `get_terms` means that `term_exists` is now cached. For developers using `term_exists` where cache invalidation is disabled, such as importing, a workaround was added to ensure that queries are uncached. 

Props Spacedmonkey, boonebgorges, flixos90, peterwilsoncc. 
Fixes #36949. 


git-svn-id: https://develop.svn.wordpress.org/trunk@52921 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Jonny Harris
2022-03-11 11:05:02 +00:00
parent 1bcd722fd6
commit 34d46cd501
5 changed files with 186 additions and 43 deletions
@@ -54,6 +54,7 @@ class Tests_Term_SplitSharedTerm extends WP_UnitTestCase {
array( '%d' ),
array( '%d' )
);
clean_term_cache( $t1['term_id'], 'category' );
$t2_child = wp_insert_term(
'Foo Child',
@@ -151,6 +152,7 @@ class Tests_Term_SplitSharedTerm extends WP_UnitTestCase {
array( '%d' ),
array( '%d' )
);
clean_term_cache( $t1['term_id'], 'category' );
$th = _get_term_hierarchy( 'wptests_tax_4' );
$new_term_id = _split_shared_term( $t1['term_id'], $t3['term_taxonomy_id'] );
@@ -179,6 +181,7 @@ class Tests_Term_SplitSharedTerm extends WP_UnitTestCase {
array( '%d' ),
array( '%d' )
);
clean_term_cache( $t1['term_id'], 'category' );
$this->assertSame( $t1['term_id'], get_option( 'default_category', -1 ) );
@@ -207,6 +210,7 @@ class Tests_Term_SplitSharedTerm extends WP_UnitTestCase {
array( '%d' ),
array( '%d' )
);
clean_term_cache( $t1['term_id'], 'category' );
$menu_id = wp_create_nav_menu( 'Nav Menu Bar' );
$cat_menu_item = wp_update_nav_menu_item(
@@ -245,6 +249,7 @@ class Tests_Term_SplitSharedTerm extends WP_UnitTestCase {
array( 'term_id' => $shared_term_id ),
array( 'term_taxonomy_id' => $nav_term->term_taxonomy_id )
);
clean_term_cache( $shared_term_id, 'category' );
set_theme_mod( 'nav_menu_locations', array( 'foo' => $shared_term_id ) );
@@ -274,6 +279,7 @@ class Tests_Term_SplitSharedTerm extends WP_UnitTestCase {
array( 'term_id' => $shared_term_id ),
array( 'term_taxonomy_id' => $nav_term->term_taxonomy_id )
);
clean_term_cache( $shared_term_id, 'category' );
$t1 = wp_insert_term( 'Random term', 'category' );
$cat_menu_item = wp_update_nav_menu_item(