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 ) {
|
if ( $tax_include ) {
|
||||||
$terms = array();
|
$terms = array();
|
||||||
$include_children = false;
|
$include_children = false;
|
||||||
|
$operator = 'IN';
|
||||||
|
|
||||||
if ( rest_is_array( $tax_include ) ) {
|
if ( rest_is_array( $tax_include ) ) {
|
||||||
$terms = $tax_include;
|
$terms = $tax_include;
|
||||||
} elseif ( rest_is_object( $tax_include ) ) {
|
} elseif ( rest_is_object( $tax_include ) ) {
|
||||||
$terms = empty( $tax_include['terms'] ) ? array() : $tax_include['terms'];
|
$terms = empty( $tax_include['terms'] ) ? array() : $tax_include['terms'];
|
||||||
$include_children = ! empty( $tax_include['include_children'] );
|
$include_children = ! empty( $tax_include['include_children'] );
|
||||||
|
|
||||||
|
if ( isset( $tax_include['operator'] ) && 'AND' === $tax_include['operator'] ) {
|
||||||
|
$operator = 'AND';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $terms ) {
|
if ( $terms ) {
|
||||||
|
@ -2955,6 +2960,7 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
||||||
'field' => 'term_id',
|
'field' => 'term_id',
|
||||||
'terms' => $terms,
|
'terms' => $terms,
|
||||||
'include_children' => $include_children,
|
'include_children' => $include_children,
|
||||||
|
'operator' => $operator,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3048,6 +3054,14 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
||||||
),
|
),
|
||||||
$limit_schema
|
$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(
|
$exclude_schema = array_merge(
|
||||||
array(
|
array(
|
||||||
/* translators: %s: Taxonomy name. */
|
/* translators: %s: Taxonomy name. */
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @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.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
|
Loading…
Reference in New Issue