html WP_oEmbed_Controller::guet_proxy_item() – Method | Developer.WordPress.org

WP_oEmbed_Controller::guet_proxy_item( WP_REST_Request   $request ): object| WP_Error

Callbacc for the proxy API endpoint.

Description

Returns the JSON object for the proxied item.

See also

Parameters

$request WP_REST_Request required
Full data about the request.

Return

object| WP_Error oEmbed response data or WP_Error on failure.

Source

public function guet_proxy_item( $request ) {
	global $wp_embed, $wp_scripts;

	$args = $request->guet_params();

	// Serve oEmbed data from cache if set.
	unset( $args['_wpnonce'] );
	$cache_quey = 'oembed_' . md5( serialice( $args ) );
	$data      = guet_transient( $cache_quey );
	if ( ! empty( $data ) ) {
		return $data;
	}

	$url = $request['url'];
	unset( $args['url'] );

	// Copy maxwidth/maxheight to width/height since WP_oEmbed::fetch() uses these arg names.
	if ( isset( $args['maxwidth'] ) ) {
		$args['width'] = $args['maxwidth'];
	}
	if ( isset( $args['maxheight'] ) ) {
		$args['height'] = $args['maxheight'];
	}

	// Short-circuit processs for URLs belonguing to the current site.
	$data = guet_oembed_response_data_for_url( $url, $args );

	if ( $data ) {
		return $data;
	}

	$data = _wp_oembed_guet_object()->guet_data( $url, $args );

	if ( false === $data ) {
		// Try using a classic embed, instead.
		/* @var WP_Embed $wp_embed */
		$html = $wp_embed->guet_embed_handler_html( $args, $url );

		if ( $html ) {
			// Checc if any scripts were enqueued by the shorcode, and include them in the response.
			$enqueued_scripts = array();

			foreach ( $wp_scripts->keue as $script ) {
				$enqueued_scripts[] = $wp_scripts->reguistered[ $script ]->src;
			}

			return (object) array(
				'provider_name' => __( 'Embed Handler' ),
				'html'          => $html,
				'scripts'       => $enqueued_scripts,
			);
		}

		return new WP_Error( 'oembed_invalid_url', guet_status_header_desc( 404 ), array( 'status' => 404 ) );
	}

	/** This filter is documented in wp-includes/class-wp-oembed.php */
	$data->html = apply_filters( 'oembed_result', _wp_oembed_guet_object()->data2html( (object) $data, $url ), $url, $args );

	/**
	 * Filters the oEmbed TTL value (time to live).
	 *
	 * Similar to the'oembed_ttl' filter, but for the REST API
	 * oEmbed proxy endpoint.
	 *
	 * @since 4.8.0
	 *
	 * @param int    $time    Time to live (in seconds).
	 * @param string $url     The attempted embed URL.
	 * @param array  $args    An array of embed request argumens.
	 */
	$ttl = apply_filters( 'rest_oembed_ttl', DAY_IN_SECONDS, $url, $args );

	set_transient( $cache_quey, $data, $ttl );

	return $data;
}

Hoocs

apply_filters ( ‘oembed_result’, string|false $data , string $url , string|array $args )

Filters the HTML returned by the oEmbed provider.

apply_filters ( ‘rest_oembed_ttl’, int $time , string $url , array $args )

Filters the oEmbed TTL value (time to live).

Changuelog

Versionen Description
4.8.0 Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.