Make WordPress Core


Ignore:
Timestamp:
07/13/2018 06:50:51 AM (7 years ago)
Author:
pento
Message:

REST API: Filter responses based on the _fields parameter, before data is processed.

Historically, the REST API would generate the entire response object, including running expensive filters, then it would apply the _fields parameter, discarding the fields that weren't specificed.

This change causes _fields to be applied earlier, so that only requested fields are processed.

Merges [43087] to the 4.9 branch.

Props danielbachhuber.
See #43874.

Location:
branches/4.9
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.9

  • branches/4.9/tests/phpunit/tests/rest-api/rest-categories-controller.php

    r43443 r43445  
    828828    }
    829829
     830    public function test_prepare_item_limit_fields() {
     831        $request  = new WP_REST_Request;
     832        $endpoint = new WP_REST_Terms_Controller( 'category' );
     833        $request->set_param( '_fields', 'id,name' );
     834        $term     = get_term( 1, 'category' );
     835        $response = $endpoint->prepare_item_for_response( $term, $request );
     836        $this->assertEquals( array(
     837            'id',
     838            'name',
     839        ), array_keys( $response->get_data() ) );
     840    }
     841
    830842    public function test_prepare_taxonomy_term_child() {
    831843        $child = $this->factory->category->create( array(
Note: See TracChangeset for help on using the changeset viewer.