WC_REST_Controller::get_fields_for_response()
Gets an array of fields to be included on the response.
Included fields are based on item schema and _fields= request argument. Updated from WordPress 5.3, included into this class to support old versions.
Method of the class: WC_REST_Controller{}
No Hooks.
Return
Array
. Fields to be included in the response.
Usage
$WC_REST_Controller = new WC_REST_Controller(); $WC_REST_Controller->get_fields_for_response( $request );
- $request(WP_REST_Request) (required)
- Full details about the request.
Changelog
Since 3.5.0 | Introduced. |
WC_REST_Controller::get_fields_for_response() WC REST Controller::get fields for response code WC 9.8.1
public function get_fields_for_response( $request ) { // From xdebug profiling, this method could take upto 25% of request time in index calls. // Cache it and make sure _fields was cached on current request object! // TODO: Submit this caching behavior in core. if ( isset( $this->_fields ) && is_array( $this->_fields ) && $request === $this->_request ) { return $this->_fields; } $this->_request = $request; $schema = $this->get_item_schema(); $properties = isset( $schema['properties'] ) ? $schema['properties'] : array(); $additional_fields = $this->get_additional_fields(); foreach ( $additional_fields as $field_name => $field_options ) { // For back-compat, include any field with an empty schema // because it won't be present in $this->get_item_schema(). if ( is_null( $field_options['schema'] ) ) { $properties[ $field_name ] = $field_options; } } // Exclude fields that specify a different context than the request context. $context = $request['context']; if ( $context ) { foreach ( $properties as $name => $options ) { if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) { unset( $properties[ $name ] ); } } } $fields = array_keys( $properties ); if ( ! isset( $request['_fields'] ) ) { $this->_fields = $fields; return $fields; } $requested_fields = wp_parse_list( $request['_fields'] ); if ( 0 === count( $requested_fields ) ) { $this->_fields = $fields; return $fields; } // Trim off outside whitespace from the comma delimited list. $requested_fields = array_map( 'trim', $requested_fields ); // Always persist 'id', because it can be needed for add_additional_fields_to_object(). if ( in_array( 'id', $fields, true ) ) { $requested_fields[] = 'id'; } // Return the list of all requested fields which appear in the schema. $this->_fields = array_reduce( $requested_fields, function ( $response_fields, $field ) use ( $fields ) { if ( in_array( $field, $fields, true ) ) { $response_fields[] = $field; return $response_fields; } // Check for nested fields if $field is not a direct match. $nested_fields = explode( '.', $field ); // A nested field is included so long as its top-level property // is present in the schema. if ( in_array( $nested_fields[0], $fields, true ) ) { $response_fields[] = $field; } return $response_fields; }, array() ); return $this->_fields; }