161 |
161 |
162 if ( is_wp_error( $global_styles_config ) ) { |
162 if ( is_wp_error( $global_styles_config ) ) { |
163 return $global_styles_config; |
163 return $global_styles_config; |
164 } |
164 } |
165 |
165 |
|
166 $is_head_request = $request->is_method( 'HEAD' ); |
|
167 |
166 if ( wp_revisions_enabled( $parent ) ) { |
168 if ( wp_revisions_enabled( $parent ) ) { |
167 $registered = $this->get_collection_params(); |
169 $registered = $this->get_collection_params(); |
168 $query_args = array( |
170 $query_args = array( |
169 'post_parent' => $parent->ID, |
171 'post_parent' => $parent->ID, |
170 'post_type' => 'revision', |
172 'post_type' => 'revision', |
184 if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) { |
186 if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) { |
185 $query_args[ $wp_param ] = $request[ $api_param ]; |
187 $query_args[ $wp_param ] = $request[ $api_param ]; |
186 } |
188 } |
187 } |
189 } |
188 |
190 |
|
191 if ( $is_head_request ) { |
|
192 // Force the 'fields' argument. For HEAD requests, only post IDs are required to calculate pagination. |
|
193 $query_args['fields'] = 'ids'; |
|
194 // Disable priming post meta for HEAD requests to improve performance. |
|
195 $query_args['update_post_term_cache'] = false; |
|
196 $query_args['update_post_meta_cache'] = false; |
|
197 } |
|
198 |
189 $revisions_query = new WP_Query(); |
199 $revisions_query = new WP_Query(); |
190 $revisions = $revisions_query->query( $query_args ); |
200 $revisions = $revisions_query->query( $query_args ); |
191 $offset = isset( $query_args['offset'] ) ? (int) $query_args['offset'] : 0; |
201 $offset = isset( $query_args['offset'] ) ? (int) $query_args['offset'] : 0; |
192 $page = (int) $query_args['paged']; |
202 $page = isset( $query_args['paged'] ) ? (int) $query_args['paged'] : 0; |
193 $total_revisions = $revisions_query->found_posts; |
203 $total_revisions = $revisions_query->found_posts; |
194 |
204 |
195 if ( $total_revisions < 1 ) { |
205 if ( $total_revisions < 1 ) { |
196 // Out-of-bounds, run the query again without LIMIT for total count. |
206 // Out-of-bounds, run the query again without LIMIT for total count. |
197 unset( $query_args['paged'], $query_args['offset'] ); |
207 unset( $query_args['paged'], $query_args['offset'] ); |
226 $total_revisions = 0; |
236 $total_revisions = 0; |
227 $max_pages = 0; |
237 $max_pages = 0; |
228 $page = (int) $request['page']; |
238 $page = (int) $request['page']; |
229 } |
239 } |
230 |
240 |
231 $response = array(); |
241 if ( ! $is_head_request ) { |
232 |
242 $response = array(); |
233 foreach ( $revisions as $revision ) { |
243 |
234 $data = $this->prepare_item_for_response( $revision, $request ); |
244 foreach ( $revisions as $revision ) { |
235 $response[] = $this->prepare_response_for_collection( $data ); |
245 $data = $this->prepare_item_for_response( $revision, $request ); |
236 } |
246 $response[] = $this->prepare_response_for_collection( $data ); |
237 |
247 } |
238 $response = rest_ensure_response( $response ); |
248 |
|
249 $response = rest_ensure_response( $response ); |
|
250 } else { |
|
251 $response = new WP_REST_Response( array() ); |
|
252 } |
239 |
253 |
240 $response->header( 'X-WP-Total', (int) $total_revisions ); |
254 $response->header( 'X-WP-Total', (int) $total_revisions ); |
241 $response->header( 'X-WP-TotalPages', (int) $max_pages ); |
255 $response->header( 'X-WP-TotalPages', (int) $max_pages ); |
242 |
256 |
243 $request_params = $request->get_query_params(); |
257 $request_params = $request->get_query_params(); |
273 * @param WP_Post $post Post revision object. |
287 * @param WP_Post $post Post revision object. |
274 * @param WP_REST_Request $request Request object. |
288 * @param WP_REST_Request $request Request object. |
275 * @return WP_REST_Response|WP_Error Response object. |
289 * @return WP_REST_Response|WP_Error Response object. |
276 */ |
290 */ |
277 public function prepare_item_for_response( $post, $request ) { |
291 public function prepare_item_for_response( $post, $request ) { |
|
292 // Don't prepare the response body for HEAD requests. |
|
293 if ( $request->is_method( 'HEAD' ) ) { |
|
294 return new WP_REST_Response( array() ); |
|
295 } |
|
296 |
278 $parent = $this->get_parent( $request['parent'] ); |
297 $parent = $this->get_parent( $request['parent'] ); |
279 $global_styles_config = $this->get_decoded_global_styles_json( $post->post_content ); |
298 $global_styles_config = $this->get_decoded_global_styles_json( $post->post_content ); |
280 |
299 |
281 if ( is_wp_error( $global_styles_config ) ) { |
300 if ( is_wp_error( $global_styles_config ) ) { |
282 return $global_styles_config; |
301 return $global_styles_config; |