Proxy_Controller::get_items( WP_REST_Request $request )
Summary
Proxy requests.
Parameters
- $request
-
(WP_REST_Request) (Required) Proxied request.
Return
(WP_REST_Response|WP_Error)
Source
File: src/BigCommerce/Proxy/Proxy_Controller.php
public function get_items( $request ) { /** * Filters a proxy REST request before it is run. * * @param WP_REST_Request $request Original request. */ $request = apply_filters( 'bigcommerce/proxy/request', $request ); /** * Fires before a proxy REST request is run. * * @param WP_REST_Request $request API request. */ do_action( 'bigcommerce/proxy/request_received', $request ); /** * Pre-fetch results. Can be from database or from cache. * * @param array $ Empty array. * @param WP_REST_Request $request API request. * @param array $ Proxy configuration. */ $result = apply_filters( 'bigcommerce/proxy/result_pre', [], $request ); $params = $request->get_params(); // Get the route. $route = $this->route( $request ); // We have no results, use the BigCommerce API. if ( is_wp_error( $result ) || empty( $result ) ) { // Request arguments. $args = [ 'headers' => $this->get_request_headers( $request, $route ), ]; // Proxy the request. $response = wp_remote_get( add_query_arg( $params, $route ), $args ); /** * Raw API response received. * * @param object|array $response Response from BigCommerce API. * @param string $route Route requested. * @param WP_REST_Request $request API request. */ do_action( 'bigcommerce/proxy/raw_response_received', $response, $route, $request ); if ( 200 !== $response['response']['code'] || is_wp_error( $response ) ) { return $response; } $result = json_decode( $response['body'], true ); $result['data'] = $this->filter_excluded_fields( $request->get_route(), $result['data'] ); /** * Do something with the response before it is returned. E.g. Import the product(s) and/or cache it. * * @param array|\WP_Error $result Result from API call. * @param WP_REST_Request $request API request. */ do_action( 'bigcommerce/proxy/response_received', $result, $request ); } /** * Filter the response results before returning it. * * @param array|\WP_Error $result Result from API call. * @param string $route Route requested. * @param WP_REST_Request $request API request. */ $result = apply_filters( 'bigcommerce/proxy/result', $result, $route, $request ); $rest_response = new WP_REST_Response( $result ); /** * Filter the WordPress REST response before it gets dispatched. * * @param WP_REST_Response $rest_response Response to send back to request.. * @param string $route Route requested. * @param WP_REST_Request $request API request. */ $rest_response = apply_filters( 'bigcommerce/proxy/rest_response', $rest_response, $route, $request ); return rest_ensure_response( $rest_response ); }