REST API: Add support for modifying the term relation when querying posts.
By default, a post most contain any of the requested terms to be included in the response. This commit adds a new `operator` property that can be set to `AND` to require a post to contain all of the requested terms. For example, `/wp/v2/posts?tags[terms]=1,2,3&tags[operator]=AND` will return posts that have tags with the ids of 1, 2, and 3. Props dlh, earnjam, Clorith, jnylen0, sebbb. Fixes #41287. Built from https://develop.svn.wordpress.org/trunk@51026 git-svn-id: http://core.svn.wordpress.org/trunk@50635 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
6e4b41c848
commit
cc26123e20
|
@ -2941,12 +2941,17 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
|||
if ( $tax_include ) {
|
||||
$terms = array();
|
||||
$include_children = false;
|
||||
$operator = 'IN';
|
||||
|
||||
if ( rest_is_array( $tax_include ) ) {
|
||||
$terms = $tax_include;
|
||||
} elseif ( rest_is_object( $tax_include ) ) {
|
||||
$terms = empty( $tax_include['terms'] ) ? array() : $tax_include['terms'];
|
||||
$include_children = ! empty( $tax_include['include_children'] );
|
||||
|
||||
if ( isset( $tax_include['operator'] ) && 'AND' === $tax_include['operator'] ) {
|
||||
$operator = 'AND';
|
||||
}
|
||||
}
|
||||
|
||||
if ( $terms ) {
|
||||
|
@ -2955,6 +2960,7 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
|||
'field' => 'term_id',
|
||||
'terms' => $terms,
|
||||
'include_children' => $include_children,
|
||||
'operator' => $operator,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -3048,6 +3054,14 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
|||
),
|
||||
$limit_schema
|
||||
);
|
||||
// 'operator' is supported only for 'include' queries.
|
||||
$include_schema['oneOf'][1]['properties']['operator'] = array(
|
||||
'description' => __( 'Whether items must be assigned all or any of the specified terms.' ),
|
||||
'type' => 'string',
|
||||
'enum' => array( 'AND', 'OR' ),
|
||||
'default' => 'OR',
|
||||
);
|
||||
|
||||
$exclude_schema = array_merge(
|
||||
array(
|
||||
/* translators: %s: Taxonomy name. */
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '5.8-alpha-51025';
|
||||
$wp_version = '5.8-alpha-51026';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
|
Loading…
Reference in New Issue