Introduce `wp_get_object_terms_args` filter.

This filter allows developers to modify the arguments passed to
`wp_get_object_terms()` before the query is run.

Props enrico.sorcinelli.
Fixes #35925.

git-svn-id: https://develop.svn.wordpress.org/trunk@40994 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2017-07-02 18:28:21 +00:00
parent 3a4ffa09ab
commit a16d16449d
2 changed files with 40 additions and 0 deletions

View File

@ -1882,6 +1882,18 @@ function wp_get_object_terms($object_ids, $taxonomies, $args = array()) {
$args = wp_parse_args( $args );
/**
* Filter arguments for retrieving object terms.
*
* @since 4.9.0
*
* @param array $args An array of arguments for retrieving terms for the given object(s).
* See {@see wp_get_object_terms()} for details.
* @param int|array $object_ids Object ID or array of IDs.
* @param string|array $taxonomies The taxonomies to retrieve terms from.
*/
$args = apply_filters( 'wp_get_object_terms_args', $args, $object_ids, $taxonomies );
/*
* When one or more queried taxonomies is registered with an 'args' array,
* those params override the `$args` passed to this function.

View File

@ -732,4 +732,32 @@ class Tests_Term_WpGetObjectTerms extends WP_UnitTestCase {
$this->assertEquals( array( $t1, $t3, $t2 ), $found );
}
/**
* @ticket 35925
*/
public function test_wp_get_object_terms_args_filter() {
$taxonomy = 'wptests_tax_4';
register_taxonomy( $taxonomy, 'post', array( 'sort' => 'true' ) );
$post_id = self::factory()->post->create();
$terms = array( 'foo', 'bar', 'baz' );
$set = wp_set_object_terms( $post_id, $terms, $taxonomy );
// Filter for maintaining term order
add_filter( 'wp_get_object_terms_args', array( $this, 'filter_wp_get_object_terms_args' ), 10, 3 );
// Test directly
$get_object_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'names' ) );
$this->assertEquals( $terms, $get_object_terms );
// Test metabox taxonomy (admin advanced edit)
$terms_to_edit = get_terms_to_edit( $post_id, $taxonomy );
$this->assertEquals( implode( ',', $terms ), $terms_to_edit );
}
function filter_wp_get_object_terms_args ( $args, $object_ids, $taxonomies ) {
$args['orderby'] = 'term_order';
return $args;
}
}