wp/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php
changeset 22 8c2e4d02f4ef
parent 21 48c4eec2b7e6
equal deleted inserted replaced
21:48c4eec2b7e6 22:8c2e4d02f4ef
   251 				__( 'You need to define an include parameter to order by include.' ),
   251 				__( 'You need to define an include parameter to order by include.' ),
   252 				array( 'status' => 400 )
   252 				array( 'status' => 400 )
   253 			);
   253 			);
   254 		}
   254 		}
   255 
   255 
       
   256 		$is_head_request = $request->is_method( 'HEAD' );
       
   257 
   256 		if ( wp_revisions_enabled( $parent ) ) {
   258 		if ( wp_revisions_enabled( $parent ) ) {
   257 			$registered = $this->get_collection_params();
   259 			$registered = $this->get_collection_params();
   258 			$args       = array(
   260 			$args       = array(
   259 				'post_parent'      => $parent->ID,
   261 				'post_parent'      => $parent->ID,
   260 				'post_type'        => 'revision',
   262 				'post_type'        => 'revision',
   285 			// For backward-compatibility, 'date' needs to resolve to 'date ID'.
   287 			// For backward-compatibility, 'date' needs to resolve to 'date ID'.
   286 			if ( isset( $args['orderby'] ) && 'date' === $args['orderby'] ) {
   288 			if ( isset( $args['orderby'] ) && 'date' === $args['orderby'] ) {
   287 				$args['orderby'] = 'date ID';
   289 				$args['orderby'] = 'date ID';
   288 			}
   290 			}
   289 
   291 
       
   292 			if ( $is_head_request ) {
       
   293 				// Force the 'fields' argument. For HEAD requests, only post IDs are required to calculate pagination.
       
   294 				$args['fields'] = 'ids';
       
   295 				// Disable priming post meta for HEAD requests to improve performance.
       
   296 				$args['update_post_term_cache'] = false;
       
   297 				$args['update_post_meta_cache'] = false;
       
   298 			}
       
   299 
   290 			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
   300 			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
   291 			$args       = apply_filters( 'rest_revision_query', $args, $request );
   301 			$args       = apply_filters( 'rest_revision_query', $args, $request );
   292 			$query_args = $this->prepare_items_query( $args, $request );
   302 			$query_args = $this->prepare_items_query( $args, $request );
   293 
   303 
   294 			$revisions_query = new WP_Query();
   304 			$revisions_query = new WP_Query();
   295 			$revisions       = $revisions_query->query( $query_args );
   305 			$revisions       = $revisions_query->query( $query_args );
   296 			$offset          = isset( $query_args['offset'] ) ? (int) $query_args['offset'] : 0;
   306 			$offset          = isset( $query_args['offset'] ) ? (int) $query_args['offset'] : 0;
   297 			$page            = (int) $query_args['paged'];
   307 			$page            = isset( $query_args['paged'] ) ? (int) $query_args['paged'] : 0;
   298 			$total_revisions = $revisions_query->found_posts;
   308 			$total_revisions = $revisions_query->found_posts;
   299 
   309 
   300 			if ( $total_revisions < 1 ) {
   310 			if ( $total_revisions < 1 ) {
   301 				// Out-of-bounds, run the query again without LIMIT for total count.
   311 				// Out-of-bounds, run the query again without LIMIT for total count.
   302 				unset( $query_args['paged'], $query_args['offset'] );
   312 				unset( $query_args['paged'], $query_args['offset'] );
   333 			$total_revisions = 0;
   343 			$total_revisions = 0;
   334 			$max_pages       = 0;
   344 			$max_pages       = 0;
   335 			$page            = (int) $request['page'];
   345 			$page            = (int) $request['page'];
   336 		}
   346 		}
   337 
   347 
   338 		$response = array();
   348 		if ( ! $is_head_request ) {
   339 
   349 			$response = array();
   340 		foreach ( $revisions as $revision ) {
   350 
   341 			$data       = $this->prepare_item_for_response( $revision, $request );
   351 			foreach ( $revisions as $revision ) {
   342 			$response[] = $this->prepare_response_for_collection( $data );
   352 				$data       = $this->prepare_item_for_response( $revision, $request );
   343 		}
   353 				$response[] = $this->prepare_response_for_collection( $data );
   344 
   354 			}
   345 		$response = rest_ensure_response( $response );
   355 
       
   356 			$response = rest_ensure_response( $response );
       
   357 		} else {
       
   358 			$response = new WP_REST_Response( array() );
       
   359 		}
   346 
   360 
   347 		$response->header( 'X-WP-Total', (int) $total_revisions );
   361 		$response->header( 'X-WP-Total', (int) $total_revisions );
   348 		$response->header( 'X-WP-TotalPages', (int) $max_pages );
   362 		$response->header( 'X-WP-TotalPages', (int) $max_pages );
   349 
   363 
   350 		$request_params = $request->get_query_params();
   364 		$request_params = $request->get_query_params();
   571 		$post = $item;
   585 		$post = $item;
   572 
   586 
   573 		$GLOBALS['post'] = $post;
   587 		$GLOBALS['post'] = $post;
   574 
   588 
   575 		setup_postdata( $post );
   589 		setup_postdata( $post );
       
   590 
       
   591 		// Don't prepare the response body for HEAD requests.
       
   592 		if ( $request->is_method( 'HEAD' ) ) {
       
   593 			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php */
       
   594 			return apply_filters( 'rest_prepare_revision', new WP_REST_Response( array() ), $post, $request );
       
   595 		}
   576 
   596 
   577 		$fields = $this->get_fields_for_response( $request );
   597 		$fields = $this->get_fields_for_response( $request );
   578 		$data   = array();
   598 		$data   = array();
   579 
   599 
   580 		if ( in_array( 'author', $fields, true ) ) {
   600 		if ( in_array( 'author', $fields, true ) ) {