diff --git a/wp-includes/class-wp-term-query.php b/wp-includes/class-wp-term-query.php index 12e7dec242..f6f53f210c 100644 --- a/wp-includes/class-wp-term-query.php +++ b/wp-includes/class-wp-term-query.php @@ -551,6 +551,16 @@ class WP_Term_Query { $limits = ''; } + $do_distinct = false; + + /* + * Duplicate terms are generally removed when necessary after the database query. + * But when a LIMIT clause is included in the query, we let MySQL enforce + * distinctness so the count is correct. + */ + if ( ! empty( $limits ) && 'all_with_object_id' !== $args['fields'] ) { + $do_distinct = true; + } if ( ! empty( $args['search'] ) ) { $this->sql_clauses['where']['search'] = $this->get_search_sql( $args['search'] ); @@ -568,8 +578,7 @@ class WP_Term_Query { if ( ! empty( $meta_clauses ) ) { $join .= $mq_sql['join']; $this->sql_clauses['where']['meta_query'] = preg_replace( '/^\s*AND\s*/', '', $mq_sql['where'] ); - $distinct .= "DISTINCT"; - + $do_distinct = true; } $selects = array(); @@ -631,6 +640,8 @@ class WP_Term_Query { $where = implode( ' AND ', $this->sql_clauses['where'] ); + $distinct = $do_distinct ? 'DISTINCT' : ''; + /** * Filters the terms query SQL clauses. * diff --git a/wp-includes/version.php b/wp-includes/version.php index ad11c3615e..79383f07fc 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.9-alpha-41376'; +$wp_version = '4.9-alpha-41377'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.