From 292a871e440df05bdddd03a457a57ede995dc122 Mon Sep 17 00:00:00 2001 From: Ryan McCue Date: Wed, 10 May 2017 04:31:28 +0000 Subject: [PATCH] REST API: Set global $post when preparing revisions. For compatibility with filters on hooks on content filters (such as shortcodes), we need to set the global. This mirrors the Posts controller. Props pdufour, jnylen0. Fixes #40626. git-svn-id: https://develop.svn.wordpress.org/trunk@40601 602fd350-edb4-49c9-b593-d223f7449a82 --- .../endpoints/class-wp-rest-revisions-controller.php | 3 +++ .../tests/rest-api/rest-revisions-controller.php | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php index d3f665de12..131e34cdc9 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php @@ -338,6 +338,9 @@ class WP_REST_Revisions_Controller extends WP_REST_Controller { * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $post, $request ) { + $GLOBALS['post'] = $post; + + setup_postdata( $post ); $schema = $this->get_item_schema(); diff --git a/tests/phpunit/tests/rest-api/rest-revisions-controller.php b/tests/phpunit/tests/rest-api/rest-revisions-controller.php index 455700438b..4f4fe0f3c9 100644 --- a/tests/phpunit/tests/rest-api/rest-revisions-controller.php +++ b/tests/phpunit/tests/rest-api/rest-revisions-controller.php @@ -335,4 +335,16 @@ class WP_Test_REST_Revisions_Controller extends WP_Test_REST_Controller_Testcase $this->assertEquals( rest_url( '/wp/v2/' . $parent_base . '/' . $revision->post_parent ), $links['parent'][0]['href'] ); } + public function test_get_item_sets_up_postdata() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions/' . $this->revision_id1 ); + $this->server->dispatch( $request ); + + $post = get_post(); + $parent_post_id = wp_is_post_revision( $post->ID ); + + $this->assertEquals( $post->ID, $this->revision_id1 ); + $this->assertEquals( $parent_post_id, self::$post_id ); + } + }