response_to_data() публичный метод

Converts a response to data to send.
С версии: 4.4.0
public response_to_data ( WP_REST_Response $response, boolean $embed ) : array
$response WP_REST_Response Response object.
$embed boolean Whether links should be embedded.
Результат array { Data with sub-requests embedded. @type array [$_links] Links. @type array [$_embedded] Embeddeds. }
 /**
  * Converts a response to data to send.
  *
  * @param \WP_REST_Response $response Response object.
  * @param bool              $embed    Whether links should be embedded.
  *
  * @return array {
  *     Data with sub-requests embedded.
  *
  *     @type array [$_links]    Links.
  *     @type array [$_embedded] Embeddeds.
  * }
  */
 public function response_to_data($response, $embed)
 {
     $data = parent::response_to_data($response, $embed);
     $server = $this;
     /**
      * Filter return value for \CustomizeRESTResources\WP_Customize_REST_Server::response_to_data()
      *
      * @param array $data Data.
      * @param array $args {
      *     Filter args.
      *
      *     @type \WP_REST_Server   $server   The server.
      *     @type \WP_REST_Response $response The response.
      *     @type bool              $embed    Whether to embed.
      * }
      */
     $data = apply_filters('customize_rest_server_response_data', $data, compact('server', 'response', 'embed'));
     return $data;
 }
Пример #2
0
/**
 * Hooks into the REST API output to print XML instead of JSON.
 *
 * This is only done for the oEmbed API endpoint,
 * which supports both formats.
 *
 * @access private
 * @since 4.4.0
 *
 * @param bool                      $served  Whether the request has already been served.
 * @param WP_HTTP_ResponseInterface $result  Result to send to the client. Usually a WP_REST_Response.
 * @param WP_REST_Request           $request Request used to generate the response.
 * @param WP_REST_Server            $server  Server instance.
 * @return true
 */
function _oembed_rest_pre_serve_request($served, $result, $request, $server)
{
    $params = $request->get_params();
    if ('/oembed/1.0/embed' !== $request->get_route() || 'GET' !== $request->get_method()) {
        return $served;
    }
    if (!isset($params['format']) || 'xml' !== $params['format']) {
        return $served;
    }
    // Embed links inside the request.
    $data = $server->response_to_data($result, false);
    if (404 === $result->get_status()) {
        $data = $data[0];
    }
    if (!class_exists('SimpleXMLElement')) {
        status_header(501);
        die(get_status_header_desc(501));
    }
    $result = _oembed_create_xml($data);
    // Bail if there's no XML.
    if (!$result) {
        status_header(501);
        return get_status_header_desc(501);
    }
    if (!headers_sent()) {
        $server->send_header('Content-Type', 'text/xml; charset=' . get_option('blog_charset'));
    }
    echo $result;
    return true;
}
Пример #3
0
/**
 * Hooks into the REST API output to print XML instead of JSON.
 *
 * @access private
 *
 * @param bool                      $served  Whether the request has already been served.
 * @param WP_HTTP_ResponseInterface $result  Result to send to the client. Usually a WP_REST_Response.
 * @param WP_REST_Request           $request Request used to generate the response.
 * @param WP_REST_Server            $server  Server instance.
 * @return true
 */
function _oembed_rest_pre_serve_request($served, $result, $request, $server)
{
    $params = $request->get_params();
    if ('/wp/v2/oembed' !== $request->get_route() || 'GET' !== $request->get_method()) {
        return $served;
    }
    if (!isset($params['format']) || 'xml' !== $params['format']) {
        return $served;
    }
    // Embed links inside the request.
    $data = $server->response_to_data($result, false);
    if (404 === $result->get_status()) {
        $data = $data[0];
    }
    /**
     * Filter the XML response.
     *
     * @param array $data The original oEmbed response data.
     */
    $result = apply_filters('oembed_xml_response', $data);
    // Bail if there's no XML.
    if (!is_string($result)) {
        status_header(501);
        die('Not implemented');
    }
    if (!headers_sent()) {
        $server->send_header('Content-Type', 'text/xml; charset=' . get_option('blog_charset'));
    }
    echo $result;
    return true;
}
Пример #4
0
 /**
  * Hooks into the REST API output to print XML instead of JSON.
  *
  * @param bool                      $served  Whether the request has already been served.
  * @param WP_HTTP_ResponseInterface $result  Result to send to the client. Usually a WP_REST_Response.
  * @param WP_REST_Request           $request Request used to generate the response.
  * @param WP_REST_Server            $server  Server instance.
  *
  * @return bool
  */
 public function rest_pre_serve_request($served, $result, $request, $server)
 {
     $params = $request->get_params();
     if ('/wp/v2/oembed' !== $request->get_route() || 'xml' !== $params['format']) {
         return $served;
     }
     if ('HEAD' === $request->get_method()) {
         return $served;
     }
     if (!headers_sent()) {
         $server->send_header('Content-Type', 'text/xml; charset=' . get_option('blog_charset'));
     }
     // Embed links inside the request.
     $result = $server->response_to_data($result, false);
     $oembed = new SimpleXMLElement('<oembed></oembed>');
     foreach ($result as $key => $value) {
         if (is_array($value)) {
             $element = $oembed->addChild($key);
             foreach ($value as $k => $v) {
                 $element->addChild($k, $v);
             }
             continue;
         }
         $oembed->addChild($key, $value);
     }
     echo $oembed->asXML();
     return true;
 }
 /**
  * If oEmbed request wants XML, return XML instead of JSON.
  *
  * Basically a copy of {@link _oembed_rest_pre_serve_request()}. Unfortunate
  * that we have to duplicate this just for a URL check.
  *
  * @since 2.6.0
  *
  * @param bool                      $served  Whether the request has already been served.
  * @param WP_HTTP_ResponseInterface $result  Result to send to the client. Usually a WP_REST_Response.
  * @param WP_REST_Request           $request Request used to generate the response.
  * @param WP_REST_Server            $server  Server instance.
  * @return bool
  */
 public function oembed_xml_request($served, $result, $request, $server)
 {
     $params = $request->get_params();
     if (!isset($params['format']) || 'xml' !== $params['format']) {
         return $served;
     }
     // Validate URL against our oEmbed endpoint. If not valid, bail.
     // This is our mod to _oembed_rest_pre_serve_request().
     $query_params = $request->get_query_params();
     if (false === $this->validate_url_to_item_id($query_params['url'])) {
         return $served;
     }
     // Embed links inside the request.
     $data = $server->response_to_data($result, false);
     if (!class_exists('SimpleXMLElement')) {
         status_header(501);
         die(get_status_header_desc(501));
     }
     $result = _oembed_create_xml($data);
     // Bail if there's no XML.
     if (!$result) {
         status_header(501);
         return get_status_header_desc(501);
     }
     if (!headers_sent()) {
         $server->send_header('Content-Type', 'text/xml; charset=' . get_option('blog_charset'));
     }
     echo $result;
     return true;
 }