_oembed_rest_pre_serve_request() │ WP 4.4.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.

Internal function — this function is designed to be used by the kernel itself. It is not recommended to use this function in your code.

No Hooks.

Returns

bool. True if the request was served, false otherwise.

Usage

_oembed_rest_pre_serve_request( $served, $result, $request, $server );
$served(true|false) (required)
Whether the request has already been served.
$result(WP_HTTP_Response) (required)
Result to send to the client. Usually a WP_REST_Response.
$request(WP_REST_Request) (required)
Request used to generate the response.
$server(WP_REST_Server) (required)
Server instance.

Changelog

Since 4.4.0 Introduced.

_oembed_rest_pre_serve_request() code WP 7.1.2

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 ( ! 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 );
		die( get_status_header_desc( 501 ) );
	}

	if ( ! headers_sent() ) {
		$server->send_header( 'Content-Type', 'text/xml; charset=' . get_option( 'blog_charset' ) );
	}

	echo $result;

	return true;
}