From ee69f54b8a288f6d8c55e07cb3ad1f3cf55bf35b Mon Sep 17 00:00:00 2001 From: "K. Adam White" Date: Thu, 12 Sep 2019 21:28:14 +0000 Subject: [PATCH] REST API: Return term resources in "edit" context after PUT or POST request. Props westonruter, dlh. Fixes #41411. git-svn-id: https://develop.svn.wordpress.org/trunk@46098 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-rest-terms-controller.php | 4 +- .../tests/rest-api/rest-tags-controller.php | 44 +++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php index 52bc9d2b0a..6783ea9808 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php @@ -468,7 +468,7 @@ class WP_REST_Terms_Controller extends WP_REST_Controller { return $fields_update; } - $request->set_param( 'context', 'view' ); + $request->set_param( 'context', 'edit' ); /** * Fires after a single term is completely created or updated via the REST API. @@ -570,7 +570,7 @@ class WP_REST_Terms_Controller extends WP_REST_Controller { return $fields_update; } - $request->set_param( 'context', 'view' ); + $request->set_param( 'context', 'edit' ); /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */ do_action( "rest_after_insert_{$this->taxonomy}", $term, $request, false ); diff --git a/tests/phpunit/tests/rest-api/rest-tags-controller.php b/tests/phpunit/tests/rest-api/rest-tags-controller.php index 96263c4061..ec17bc71e9 100644 --- a/tests/phpunit/tests/rest-api/rest-tags-controller.php +++ b/tests/phpunit/tests/rest-api/rest-tags-controller.php @@ -1269,6 +1269,50 @@ class WP_Test_REST_Tags_Controller extends WP_Test_REST_Controller_Testcase { $this->assertSame( $num_queries, $wpdb->num_queries ); } + /** + * @ticket 41411 + */ + public function test_editable_response_uses_edit_context() { + wp_set_current_user( self::$administrator ); + + $view_field = 'view_only_field'; + $edit_field = 'edit_only_field'; + + register_rest_field( + 'tag', + $view_field, + array( + 'context' => array( 'view' ), + 'get_callback' => '__return_empty_string', + ) + ); + + register_rest_field( + 'tag', + $edit_field, + array( + 'context' => array( 'edit' ), + 'get_callback' => '__return_empty_string', + ) + ); + + $create = new WP_REST_Request( 'POST', '/wp/v2/tags' ); + $create->set_param( 'name', 'My New Term' ); + $response = rest_get_server()->dispatch( $create ); + $this->assertEquals( 201, $response->get_status() ); + $data = $response->get_data(); + $this->assertArrayHasKey( $edit_field, $data ); + $this->assertArrayNotHasKey( $view_field, $data ); + + $update = new WP_REST_Request( 'PUT', '/wp/v2/tags/' . $data['id'] ); + $update->set_param( 'name', 'My Awesome New Term' ); + $response = rest_get_server()->dispatch( $update ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + $this->assertArrayHasKey( $edit_field, $data ); + $this->assertArrayNotHasKey( $view_field, $data ); + } + public function additional_field_get_callback( $object, $request ) { return 123; }