wp/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php
changeset 22 8c2e4d02f4ef
parent 21 48c4eec2b7e6
equal deleted inserted replaced
21:48c4eec2b7e6 22:8c2e4d02f4ef
   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;