diff -r 48c4eec2b7e6 -r 8c2e4d02f4ef wp/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php --- a/wp/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php Fri Sep 05 18:40:08 2025 +0200 +++ b/wp/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php Fri Sep 05 18:52:52 2025 +0200 @@ -253,6 +253,8 @@ ); } + $is_head_request = $request->is_method( 'HEAD' ); + if ( wp_revisions_enabled( $parent ) ) { $registered = $this->get_collection_params(); $args = array( @@ -287,6 +289,14 @@ $args['orderby'] = 'date ID'; } + if ( $is_head_request ) { + // Force the 'fields' argument. For HEAD requests, only post IDs are required to calculate pagination. + $args['fields'] = 'ids'; + // Disable priming post meta for HEAD requests to improve performance. + $args['update_post_term_cache'] = false; + $args['update_post_meta_cache'] = false; + } + /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */ $args = apply_filters( 'rest_revision_query', $args, $request ); $query_args = $this->prepare_items_query( $args, $request ); @@ -294,7 +304,7 @@ $revisions_query = new WP_Query(); $revisions = $revisions_query->query( $query_args ); $offset = isset( $query_args['offset'] ) ? (int) $query_args['offset'] : 0; - $page = (int) $query_args['paged']; + $page = isset( $query_args['paged'] ) ? (int) $query_args['paged'] : 0; $total_revisions = $revisions_query->found_posts; if ( $total_revisions < 1 ) { @@ -335,15 +345,19 @@ $page = (int) $request['page']; } - $response = array(); + if ( ! $is_head_request ) { + $response = array(); - foreach ( $revisions as $revision ) { - $data = $this->prepare_item_for_response( $revision, $request ); - $response[] = $this->prepare_response_for_collection( $data ); + foreach ( $revisions as $revision ) { + $data = $this->prepare_item_for_response( $revision, $request ); + $response[] = $this->prepare_response_for_collection( $data ); + } + + $response = rest_ensure_response( $response ); + } else { + $response = new WP_REST_Response( array() ); } - $response = rest_ensure_response( $response ); - $response->header( 'X-WP-Total', (int) $total_revisions ); $response->header( 'X-WP-TotalPages', (int) $max_pages ); @@ -574,6 +588,12 @@ setup_postdata( $post ); + // Don't prepare the response body for HEAD requests. + if ( $request->is_method( 'HEAD' ) ) { + /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php */ + return apply_filters( 'rest_prepare_revision', new WP_REST_Response( array() ), $post, $request ); + } + $fields = $this->get_fields_for_response( $request ); $data = array();