mirror of
git://develop.git.wordpress.org/
synced 2025-02-07 16:10:43 +01:00
REST API: Introduce modified_before
and modified_after
query parameters for the posts endpoints.
These parameters work just the same as `before` and `after` except they operate on the post modified date instead of the post published date. Props claytoncollie, TimothyBlynJacobs, hellofromTonya Fixes #50617 git-svn-id: https://develop.svn.wordpress.org/trunk@50024 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
37f0f960ef
commit
6df02a9ce2
@ -216,14 +216,32 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
||||
// Check for & assign any parameters which require special handling or setting.
|
||||
$args['date_query'] = array();
|
||||
|
||||
// Set before into date query. Date query must be specified as an array of an array.
|
||||
if ( isset( $registered['before'], $request['before'] ) ) {
|
||||
$args['date_query'][0]['before'] = $request['before'];
|
||||
$args['date_query'][] = array(
|
||||
'before' => $request['before'],
|
||||
'column' => 'post_date',
|
||||
);
|
||||
}
|
||||
|
||||
if ( isset( $registered['modified_before'], $request['modified_before'] ) ) {
|
||||
$args['date_query'][] = array(
|
||||
'before' => $request['modified_before'],
|
||||
'column' => 'post_modified',
|
||||
);
|
||||
}
|
||||
|
||||
// Set after into date query. Date query must be specified as an array of an array.
|
||||
if ( isset( $registered['after'], $request['after'] ) ) {
|
||||
$args['date_query'][0]['after'] = $request['after'];
|
||||
$args['date_query'][] = array(
|
||||
'after' => $request['after'],
|
||||
'column' => 'post_date',
|
||||
);
|
||||
}
|
||||
|
||||
if ( isset( $registered['modified_after'], $request['modified_after'] ) ) {
|
||||
$args['date_query'][] = array(
|
||||
'after' => $request['modified_after'],
|
||||
'column' => 'post_modified',
|
||||
);
|
||||
}
|
||||
|
||||
// Ensure our per_page parameter overrides any provided posts_per_page filter.
|
||||
@ -2628,6 +2646,8 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
||||
* Retrieves the query params for the posts collection.
|
||||
*
|
||||
* @since 4.7.0
|
||||
* @since 5.4.0 The `tax_relation` query parameter was added.
|
||||
* @since 5.7.0 The `modified_after` and `modified_before` query parameters were added.
|
||||
*
|
||||
* @return array Collection parameters.
|
||||
*/
|
||||
@ -2642,6 +2662,12 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
||||
'format' => 'date-time',
|
||||
);
|
||||
|
||||
$query_params['modified_after'] = array(
|
||||
'description' => __( 'Limit response to posts modified after a given ISO8601 compliant date.' ),
|
||||
'type' => 'string',
|
||||
'format' => 'date-time',
|
||||
);
|
||||
|
||||
if ( post_type_supports( $this->post_type, 'author' ) ) {
|
||||
$query_params['author'] = array(
|
||||
'description' => __( 'Limit result set to posts assigned to specific authors.' ),
|
||||
@ -2667,6 +2693,12 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
||||
'format' => 'date-time',
|
||||
);
|
||||
|
||||
$query_params['modified_before'] = array(
|
||||
'description' => __( 'Limit response to posts modified before a given ISO8601 compliant date.' ),
|
||||
'type' => 'string',
|
||||
'format' => 'date-time',
|
||||
);
|
||||
|
||||
$query_params['exclude'] = array(
|
||||
'description' => __( 'Ensure result set excludes specific IDs.' ),
|
||||
'type' => 'array',
|
||||
|
@ -198,6 +198,8 @@ class WP_Test_REST_Attachments_Controller extends WP_Test_REST_Post_Type_Control
|
||||
'include',
|
||||
'media_type',
|
||||
'mime_type',
|
||||
'modified_after',
|
||||
'modified_before',
|
||||
'offset',
|
||||
'order',
|
||||
'orderby',
|
||||
@ -566,6 +568,60 @@ class WP_Test_REST_Attachments_Controller extends WP_Test_REST_Post_Type_Control
|
||||
$this->assertSame( $id2, $data[0]['id'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 50617
|
||||
*/
|
||||
public function test_get_items_invalid_modified_date() {
|
||||
$request = new WP_REST_Request( 'GET', '/wp/v2/media' );
|
||||
$request->set_param( 'modified_after', rand_str() );
|
||||
$request->set_param( 'modified_before', rand_str() );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 50617
|
||||
*/
|
||||
public function test_get_items_valid_modified_date() {
|
||||
$id1 = $this->factory->attachment->create_object(
|
||||
$this->test_file,
|
||||
0,
|
||||
array(
|
||||
'post_date' => '2016-01-01 00:00:00',
|
||||
'post_mime_type' => 'image/jpeg',
|
||||
'post_excerpt' => 'A sample caption',
|
||||
)
|
||||
);
|
||||
$id2 = $this->factory->attachment->create_object(
|
||||
$this->test_file,
|
||||
0,
|
||||
array(
|
||||
'post_date' => '2016-01-02 00:00:00',
|
||||
'post_mime_type' => 'image/jpeg',
|
||||
'post_excerpt' => 'A sample caption',
|
||||
)
|
||||
);
|
||||
$id3 = $this->factory->attachment->create_object(
|
||||
$this->test_file,
|
||||
0,
|
||||
array(
|
||||
'post_date' => '2016-01-03 00:00:00',
|
||||
'post_mime_type' => 'image/jpeg',
|
||||
'post_excerpt' => 'A sample caption',
|
||||
)
|
||||
);
|
||||
$this->update_post_modified( $id1, '2016-01-15 00:00:00' );
|
||||
$this->update_post_modified( $id2, '2016-01-16 00:00:00' );
|
||||
$this->update_post_modified( $id3, '2016-01-17 00:00:00' );
|
||||
$request = new WP_REST_Request( 'GET', '/wp/v2/media' );
|
||||
$request->set_param( 'modified_after', '2016-01-15T00:00:00Z' );
|
||||
$request->set_param( 'modified_before', '2016-01-17T00:00:00Z' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertCount( 1, $data );
|
||||
$this->assertSame( $id2, $data[0]['id'] );
|
||||
}
|
||||
|
||||
public function test_get_item() {
|
||||
$attachment_id = $this->factory->attachment->create_object(
|
||||
$this->test_file,
|
||||
|
@ -76,6 +76,8 @@ class WP_Test_REST_Pages_Controller extends WP_Test_REST_Post_Type_Controller_Te
|
||||
'exclude',
|
||||
'include',
|
||||
'menu_order',
|
||||
'modified_after',
|
||||
'modified_before',
|
||||
'offset',
|
||||
'order',
|
||||
'orderby',
|
||||
@ -361,6 +363,51 @@ class WP_Test_REST_Pages_Controller extends WP_Test_REST_Post_Type_Controller_Te
|
||||
$this->assertSame( $post2, $data[0]['id'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 50617
|
||||
*/
|
||||
public function test_get_items_invalid_modified_date() {
|
||||
$request = new WP_REST_Request( 'GET', '/wp/v2/pages' );
|
||||
$request->set_param( 'modified_after', rand_str() );
|
||||
$request->set_param( 'modified_before', rand_str() );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 50617
|
||||
*/
|
||||
public function test_get_items_valid_modified_date() {
|
||||
$post1 = $this->factory->post->create(
|
||||
array(
|
||||
'post_date' => '2016-01-01 00:00:00',
|
||||
'post_type' => 'page',
|
||||
)
|
||||
);
|
||||
$post2 = $this->factory->post->create(
|
||||
array(
|
||||
'post_date' => '2016-01-02 00:00:00',
|
||||
'post_type' => 'page',
|
||||
)
|
||||
);
|
||||
$post3 = $this->factory->post->create(
|
||||
array(
|
||||
'post_date' => '2016-01-03 00:00:00',
|
||||
'post_type' => 'page',
|
||||
)
|
||||
);
|
||||
$this->update_post_modified( $post1, '2016-01-15 00:00:00' );
|
||||
$this->update_post_modified( $post2, '2016-01-16 00:00:00' );
|
||||
$this->update_post_modified( $post3, '2016-01-17 00:00:00' );
|
||||
$request = new WP_REST_Request( 'GET', '/wp/v2/pages' );
|
||||
$request->set_param( 'modified_after', '2016-01-15T00:00:00Z' );
|
||||
$request->set_param( 'modified_before', '2016-01-17T00:00:00Z' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertCount( 1, $data );
|
||||
$this->assertSame( $post2, $data[0]['id'] );
|
||||
}
|
||||
|
||||
public function test_get_item() {
|
||||
|
||||
}
|
||||
|
@ -181,6 +181,8 @@ class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te
|
||||
'context',
|
||||
'exclude',
|
||||
'include',
|
||||
'modified_after',
|
||||
'modified_before',
|
||||
'offset',
|
||||
'order',
|
||||
'orderby',
|
||||
@ -1490,6 +1492,36 @@ class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te
|
||||
$this->assertSame( $post2, $data[0]['id'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 50617
|
||||
*/
|
||||
public function test_get_items_invalid_modified_date() {
|
||||
$request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
|
||||
$request->set_param( 'modified_after', rand_str() );
|
||||
$request->set_param( 'modified_before', rand_str() );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 50617
|
||||
*/
|
||||
public function test_get_items_valid_modified_date() {
|
||||
$post1 = $this->factory->post->create( array( 'post_date' => '2016-01-01 00:00:00' ) );
|
||||
$post2 = $this->factory->post->create( array( 'post_date' => '2016-01-02 00:00:00' ) );
|
||||
$post3 = $this->factory->post->create( array( 'post_date' => '2016-01-03 00:00:00' ) );
|
||||
$this->update_post_modified( $post1, '2016-01-15 00:00:00' );
|
||||
$this->update_post_modified( $post2, '2016-01-16 00:00:00' );
|
||||
$this->update_post_modified( $post3, '2016-01-17 00:00:00' );
|
||||
$request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
|
||||
$request->set_param( 'modified_after', '2016-01-15T00:00:00Z' );
|
||||
$request->set_param( 'modified_before', '2016-01-17T00:00:00Z' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertCount( 1, $data );
|
||||
$this->assertSame( $post2, $data[0]['id'] );
|
||||
}
|
||||
|
||||
public function test_get_items_all_post_formats() {
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
|
@ -298,6 +298,12 @@ mockedApiResponse.Schema = {
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"modified_after": {
|
||||
"description": "Limit response to posts modified after a given ISO8601 compliant date.",
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"author": {
|
||||
"description": "Limit result set to posts assigned to specific authors.",
|
||||
"type": "array",
|
||||
@ -322,6 +328,12 @@ mockedApiResponse.Schema = {
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"modified_before": {
|
||||
"description": "Limit response to posts modified before a given ISO8601 compliant date.",
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"exclude": {
|
||||
"description": "Ensure result set excludes specific IDs.",
|
||||
"type": "array",
|
||||
@ -1476,6 +1488,12 @@ mockedApiResponse.Schema = {
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"modified_after": {
|
||||
"description": "Limit response to posts modified after a given ISO8601 compliant date.",
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"author": {
|
||||
"description": "Limit result set to posts assigned to specific authors.",
|
||||
"type": "array",
|
||||
@ -1500,6 +1518,12 @@ mockedApiResponse.Schema = {
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"modified_before": {
|
||||
"description": "Limit response to posts modified before a given ISO8601 compliant date.",
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"exclude": {
|
||||
"description": "Ensure result set excludes specific IDs.",
|
||||
"type": "array",
|
||||
@ -2539,6 +2563,12 @@ mockedApiResponse.Schema = {
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"modified_after": {
|
||||
"description": "Limit response to posts modified after a given ISO8601 compliant date.",
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"author": {
|
||||
"description": "Limit result set to posts assigned to specific authors.",
|
||||
"type": "array",
|
||||
@ -2563,6 +2593,12 @@ mockedApiResponse.Schema = {
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"modified_before": {
|
||||
"description": "Limit response to posts modified before a given ISO8601 compliant date.",
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"exclude": {
|
||||
"description": "Ensure result set excludes specific IDs.",
|
||||
"type": "array",
|
||||
@ -3188,12 +3224,24 @@ mockedApiResponse.Schema = {
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"modified_after": {
|
||||
"description": "Limit response to posts modified after a given ISO8601 compliant date.",
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"before": {
|
||||
"description": "Limit response to posts published before a given ISO8601 compliant date.",
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"modified_before": {
|
||||
"description": "Limit response to posts modified before a given ISO8601 compliant date.",
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"required": false
|
||||
},
|
||||
"exclude": {
|
||||
"description": "Ensure result set excludes specific IDs.",
|
||||
"type": "array",
|
||||
|
Loading…
x
Reference in New Issue
Block a user