From 568b43f2429af9aada255acd8449cc81b7969311 Mon Sep 17 00:00:00 2001 From: Boone Gorges Date: Thu, 9 Oct 2014 02:48:47 +0000 Subject: [PATCH] Fix term_exists() for parent = 0. Passing a 0 (or '0') as the 'parent' param of term_exists() should limit results to terms with no parent. Adds unit test. Fixes #29851. git-svn-id: https://develop.svn.wordpress.org/trunk@29863 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/taxonomy.php | 8 ++++---- tests/phpunit/tests/term.php | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/taxonomy.php b/src/wp-includes/taxonomy.php index fe996b1f73..0e29545bab 100644 --- a/src/wp-includes/taxonomy.php +++ b/src/wp-includes/taxonomy.php @@ -1655,12 +1655,12 @@ function get_terms( $taxonomies, $args = '' ) { * * @param int|string $term The term to check * @param string $taxonomy The taxonomy name to use - * @param int $parent ID of parent term under which to confine the exists search. + * @param int $parent Optional. ID of parent term under which to confine the exists search. * @return mixed Returns 0 if the term does not exist. Returns the term ID if no taxonomy is specified * and the term ID exists. Returns an array of the term ID and the term taxonomy ID * if the taxonomy is specified and the pairing exists. */ -function term_exists($term, $taxonomy = '', $parent = 0) { +function term_exists( $term, $taxonomy = '', $parent = null ) { global $wpdb; $select = "SELECT term_id FROM $wpdb->terms as t WHERE "; @@ -1686,8 +1686,8 @@ function term_exists($term, $taxonomy = '', $parent = 0) { $where_fields = array($slug); $else_where_fields = array($term); if ( !empty($taxonomy) ) { - $parent = (int) $parent; - if ( $parent > 0 ) { + if ( is_numeric( $parent ) ) { + $parent = (int) $parent; $where_fields[] = $parent; $else_where_fields[] = $parent; $where .= ' AND tt.parent = %d'; diff --git a/tests/phpunit/tests/term.php b/tests/phpunit/tests/term.php index f7d8615820..9b0a92ad68 100644 --- a/tests/phpunit/tests/term.php +++ b/tests/phpunit/tests/term.php @@ -138,6 +138,31 @@ class Tests_Term extends WP_UnitTestCase { $this->assertEquals( $t, $found['term_id'] ); } + /** + * @ticket 29851 + */ + public function test_term_exists_taxonomy_nonempty_parent_0_should_return_false_for_child_term() { + register_taxonomy( 'foo', 'post', array( + 'hierarchical' => true, + ) ); + + $parent_term = $this->factory->term->create( array( + 'taxonomy' => 'foo', + ) ); + + $t = $this->factory->term->create( array( + 'taxonomy' => 'foo', + 'parent' => $parent_term, + 'slug' => 'child-term', + ) ); + + $found = term_exists( 'child-term', 'foo', 0 ); + + _unregister_taxonomy( 'foo' ); + + $this->assertSame( null, $found['term_id'] ); + } + public function test_term_exists_taxonomy_nonempty_parent_nonempty_match_name() { register_taxonomy( 'foo', 'post', array( 'hierarchical' => true,