Make WordPress Core


Ignore:
Timestamp:
07/22/2022 01:58:46 PM (3 years ago)
Author:
spacedmonkey
Message:

REST API: Avoid unnecessarily preparing item links.

Do not call the prepare_links methods in core REST API controllers, unless the _links or _embedded fields are requested. There is no need to prepare links if they are never returned in the response. This saves resources, as many calls to prepare_links methods perform database queries.

Props Spacedmonkey, timothyblynjacobs, rachelbaker, desrosj, dlh, hellofromTonya.
Fixes #52992.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php

    r53724 r53760  
    577577     */
    578578    public function prepare_item_for_response( $item, $request ) {
     579        $fields = $this->get_fields_for_response( $request );
     580
    579581        $item   = _get_plugin_data_markup_translate( $item['_file'], $item, false );
    580582        $marked = _get_plugin_data_markup_translate( $item['_file'], $item, true );
     
    601603
    602604        $response = new WP_REST_Response( $data );
    603         $response->add_links( $this->prepare_links( $item ) );
     605
     606        if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
     607            $response->add_links( $this->prepare_links( $item ) );
     608        }
    604609
    605610        /**
Note: See TracChangeset for help on using the changeset viewer.