From e8cba9f0cbe847b2f95db73831929bf4b20ea54c Mon Sep 17 00:00:00 2001 From: ryan Date: Thu, 24 Jul 2008 19:28:40 +0000 Subject: [PATCH] Check both slug and name when determining if is_term(). fixes #6593 for trunk git-svn-id: http://svn.automattic.com/wordpress/trunk@8433 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/includes/schema.php | 3 ++- wp-includes/taxonomy.php | 30 +++++++++++++++++++++++------- wp-includes/version.php | 2 +- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/wp-admin/includes/schema.php b/wp-admin/includes/schema.php index 0e25f3e10..a3873e78e 100644 --- a/wp-admin/includes/schema.php +++ b/wp-admin/includes/schema.php @@ -19,7 +19,8 @@ $wp_queries="CREATE TABLE $wpdb->terms ( slug varchar(200) NOT NULL default '', term_group bigint(10) NOT NULL default 0, PRIMARY KEY (term_id), - UNIQUE KEY slug (slug) + UNIQUE KEY slug (slug), + KEY name (name) ) $charset_collate; CREATE TABLE $wpdb->term_taxonomy ( term_taxonomy_id bigint(20) NOT NULL auto_increment, diff --git a/wp-includes/taxonomy.php b/wp-includes/taxonomy.php index acba6d2a9..e8da100c7 100644 --- a/wp-includes/taxonomy.php +++ b/wp-includes/taxonomy.php @@ -761,20 +761,36 @@ function &get_terms($taxonomies, $args = '') { function is_term($term, $taxonomy = '') { global $wpdb; + $select = "SELECT term_id FROM $wpdb->terms as t WHERE "; + $tax_select = "SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE "; + if ( is_int($term) ) { if ( 0 == $term ) return 0; $where = 't.term_id = %d'; - } else { - if ( '' === $term = sanitize_title($term) ) - return 0; - $where = 't.slug = %s'; + if ( !empty($taxonomy) ) + return $wpdb->get_row( $wpdb->prepare( $tax_select . $where . " AND tt.taxonomy = %s", $term, $taxonomy ), ARRAY_A ); + else + return $wpdb->get_var( $wpdb->prepare( $select . $where, $term ) ); } - if ( !empty($taxonomy) ) - return $wpdb->get_row( $wpdb->prepare("SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $where AND tt.taxonomy = %s", $term, $taxonomy), ARRAY_A); + if ( '' === $slug = sanitize_title($term) ) + return 0; - return $wpdb->get_var( $wpdb->prepare("SELECT term_id FROM $wpdb->terms as t WHERE $where", $term) ); + $where = 't.slug = %s'; + $else_where = 't.name = %s'; + + if ( !empty($taxonomy) ) { + if ( $result = $wpdb->get_row( $wpdb->prepare("SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $where AND tt.taxonomy = %s", $slug, $taxonomy), ARRAY_A) ) + return $result; + + return $wpdb->get_row( $wpdb->prepare("SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $else_where AND tt.taxonomy = %s", $term, $taxonomy), ARRAY_A); + } + + if ( $result = $wpdb->get_var( $wpdb->prepare("SELECT term_id FROM $wpdb->terms as t WHERE $where", $slug) ) ) + return $result; + + return $wpdb->get_var( $wpdb->prepare("SELECT term_id FROM $wpdb->terms as t WHERE $else_where", $term) ); } /** diff --git a/wp-includes/version.php b/wp-includes/version.php index 06eb3317d..721f5d96a 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -15,6 +15,6 @@ $wp_version = '2.7-bleeding'; * * @global int $wp_db_version */ -$wp_db_version = 8202; +$wp_db_version = 8370; ?>