Taxonomy: Don't pass results of 'count' query through 'get_terms' filter.

Use of the 'get_terms' filter was consolidated in [37572], with the
introduction of `WP_Term_Query`. At that time, the result of 'count=true'
queries began being filtered by 'get_terms'. This breaks existing 'get_terms'
callbacks, which often assume that the returned value will be an array or a
`WP_Error` object.

Props JustinSainton.
Fixes #36992.

git-svn-id: https://develop.svn.wordpress.org/trunk@37623 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2016-06-02 14:37:55 +00:00
parent ab228ff84d
commit f6a2067d37
2 changed files with 26 additions and 0 deletions

View File

@ -1208,6 +1208,11 @@ function get_terms( $args = array(), $deprecated = '' ) {
$terms = $term_query->query( $args ); $terms = $term_query->query( $args );
// Count queries are not filtered, for legacy reasons.
if ( $term_query->query_vars['count'] ) {
return $terms;
}
/** /**
* Filters the found terms. * Filters the found terms.
* *

View File

@ -2179,6 +2179,27 @@ class Tests_Term_getTerms extends WP_UnitTestCase {
$this->assertEqualSets( array(), $found ); $this->assertEqualSets( array(), $found );
} }
/**
* @ticket 36992
* @ticket 35381
*/
public function test_count_should_pass_through_main_get_terms_filter() {
add_filter( 'get_terms', array( __CLASS__, 'maybe_filter_count' ) );
$found = get_terms( array(
'hide_empty' => 0,
'count' => true,
) );
remove_filter( 'get_terms', array( __CLASS__, 'maybe_filter_count' ) );
$this->assertNotEquals( 'foo', $found );
}
public static function maybe_filter_count() {
return 'foo';
}
protected function create_hierarchical_terms_and_posts() { protected function create_hierarchical_terms_and_posts() {
$terms = array(); $terms = array();