WordPress.org

Make WordPress Core

Ticket #44321: 44321.2.diff

File 44321.2.diff, 3.3 KB (added by danielbachhuber, 16 months ago)
  • src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

    diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
    index b7b2dd79f6..0dfe333b9e 100644
    a b class WP_REST_Posts_Controller extends WP_REST_Controller { 
    16641664                }
    16651665
    16661666                if ( in_array( $post->post_type, array( 'post', 'page' ), true ) || post_type_supports( $post->post_type, 'revisions' ) ) {
     1667                        $revisions       = wp_get_post_revisions( $post->ID, array( 'fields' => 'ids' ) );
     1668                        $revisions_count = count( $revisions );
     1669
    16671670                        $links['version-history'] = array(
    1668                                 'href' => rest_url( trailingslashit( $base ) . $post->ID . '/revisions' ),
     1671                                'href'  => rest_url( trailingslashit( $base ) . $post->ID . '/revisions' ),
     1672                                'count' => $revisions_count,
    16691673                        );
     1674
     1675                        if ( $revisions_count > 0 ) {
     1676                                $last_revision = array_shift( $revisions );
     1677
     1678                                $links['predecessor'] = array(
     1679                                        'href' => rest_url( trailingslashit( $base ) . $post->ID . '/revisions/' . $last_revision ),
     1680                                        'id'   => $last_revision,
     1681                                );
     1682                        }
     1683
    16701684                }
    16711685
    16721686                $post_type_obj = get_post_type_object( $post->post_type );
  • tests/phpunit/tests/rest-api/rest-posts-controller.php

    diff --git a/tests/phpunit/tests/rest-api/rest-posts-controller.php b/tests/phpunit/tests/rest-api/rest-posts-controller.php
    index 721b08292a..ad795fef57 100644
    a b class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te 
    12831283                $this->assertEquals( $replies_url, $links['replies'][0]['href'] );
    12841284
    12851285                $this->assertEquals( rest_url( '/wp/v2/posts/' . self::$post_id . '/revisions' ), $links['version-history'][0]['href'] );
     1286                $this->assertEquals( 0, $links['version-history'][0]['attributes']['count'] );
     1287                $this->assertFalse( isset( $links['predecessor'] ) );
    12861288
    12871289                $attachments_url = rest_url( '/wp/v2/media' );
    12881290                $attachments_url = add_query_arg( 'parent', self::$post_id, $attachments_url );
    class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te 
    13101312                $this->assertEquals( $category_url, $cat_link['href'] );
    13111313        }
    13121314
     1315        public function test_get_item_links_predecessor() {
     1316                wp_update_post(
     1317                        array(
     1318                                'post_content' => 'This content is marvelous.',
     1319                                'ID'           => self::$post_id,
     1320                        )
     1321                );
     1322                $revisions  = wp_get_post_revisions( self::$post_id );
     1323                $revision_1 = array_pop( $revisions );
     1324
     1325                $request  = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     1326                $response = rest_get_server()->dispatch( $request );
     1327
     1328                $links = $response->get_links();
     1329
     1330                $this->assertEquals( rest_url( '/wp/v2/posts/' . self::$post_id . '/revisions' ), $links['version-history'][0]['href'] );
     1331                $this->assertEquals( 1, $links['version-history'][0]['attributes']['count'] );
     1332
     1333                $this->assertEquals( rest_url( '/wp/v2/posts/' . self::$post_id . '/revisions/' . $revision_1->ID ), $links['predecessor'][0]['href'] );
     1334                $this->assertEquals( $revision_1->ID, $links['predecessor'][0]['attributes']['id'] );
     1335        }
     1336
    13131337        public function test_get_item_links_no_author() {
    13141338                $request  = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
    13151339                $response = rest_get_server()->dispatch( $request );