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 ) ) { |