/** * WP_oEmbed_Controller class, used to provide an oEmbed endpoint. * * @package WordPress * @subpackage Embeds * @since 4.4.0 */ /** * oEmbed API endpoint controller. * * Registers the REST API route and delivers the response data. * The output format (XML or JSON) is handled by the REST API. * * @since 4.4.0 */ #[AllowDynamicProperties] final class WP_oEmbed_Controller { /** * Register the oEmbed REST API route. * * @since 4.4.0 */ public function register_routes() { /** * Filters the maxwidth oEmbed parameter. * * @since 4.4.0 * * @param int $maxwidth Maximum allowed width. Default 600. */ $maxwidth = apply_filters( 'oembed_default_width', 600 ); register_rest_route( 'oembed/1.0', '/embed', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => '__return_true', 'args' => array( 'url' => array( 'description' => __( 'The URL of the resource for which to fetch oEmbed data.' ), 'required' => true, 'type' => 'string', 'format' => 'uri', ), 'format' => array( 'default' => 'json', 'sanitize_callback' => 'wp_oembed_ensure_format', ), 'maxwidth' => array( 'default' => $maxwidth, 'sanitize_callback' => 'absint', ), ), ), ) ); register_rest_route( 'oembed/1.0', '/proxy', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_proxy_item' ), 'permission_callback' => array( $this, 'get_proxy_item_permissions_check' ), 'args' => array( 'url' => array( 'description' => __( 'The URL of the resource for which to fetch oEmbed data.' ), 'required' => true, 'type' => 'string', 'format' => 'uri', ), 'format' => array( 'description' => __( 'The oEmbed format to use.' ), 'type' => 'string', 'default' => 'json', 'enum' => array( 'json', 'xml', ), ), 'maxwidth' => array( 'description' => __( 'The maximum width of the embed frame in pixels.' ), 'type' => 'integer', 'default' => $maxwidth, 'sanitize_callback' => 'absint', ), 'maxheight' => array( 'description' => __( 'The maximum height of the embed frame in pixels.' ), 'type' => 'integer', 'sanitize_callback' => 'absint', ), 'discover' => array( 'description' => __( 'Whether to perform an oEmbed discovery request for unsanctioned providers.' ), 'type' => 'boolean', 'default' => true, ), ), ), ) ); } /** * Callback for the embed API endpoint. * * Returns the JSON object for the post. * * @since 4.4.0 * * @param WP_REST_Request $request Full data about the request. * @return array|WP_Error oEmbed response data or WP_Error on failure. */ public function get_item( $request ) { $post_id = url_to_postid( $request['url'] ); /** * Filters the determined post ID. * * @since 4.4.0 * * @param int $post_id The post ID. * @param string $url The requested URL. */ $post_id = apply_filters( 'oembed_request_post_id', $post_id, $request['url'] ); $data = get_oembed_response_data( $post_id, $request['maxwidth'] ); if ( ! $data ) { return new WP_Error( 'oembed_invalid_url', get_status_header_desc( 404 ), array( 'status' => 404 ) ); } return $data; } /** * Checks if current user can make a proxy oEmbed request. * * @since 4.8.0 * * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_proxy_item_permissions_check() { if ( ! current_user_can( 'edit_posts' ) ) { return new WP_Error( 'rest_forbidden', __( 'Sorry, you are not allowed to make proxied oEmbed requests.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Callback for the proxy API endpoint. * * Returns the JSON object for the proxied item. * * @since 4.8.0 * * @see WP_oEmbed::get_html() * @global WP_Embed $wp_embed WordPress Embed object. * @global WP_Scripts $wp_scripts * * @param WP_REST_Request $request Full data about the request. * @return object|WP_Error oEmbed response data or WP_Error on failure. */ public function get_proxy_item( $request ) { global $wp_embed, $wp_scripts; $args = $request->get_params(); // Serve oEmbed data from cache if set. unset( $args['_wpnonce'] ); $cache_key = 'oembed_' . md5( serialize( $args ) ); $data = get_transient( $cache_key ); 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 process for URLs belonging to the current site. $data = get_oembed_response_data_for_url( $url, $args ); if ( $data ) { return $data; } $data = _wp_oembed_get_object()->get_data( $url, $args ); if ( false === $data ) { // Try using a classic embed, instead. /* @var WP_Embed $wp_embed */ $html = $wp_embed->get_embed_handler_html( $args, $url ); if ( $html ) { // Check if any scripts were enqueued by the shortcode, and include them in the response. $enqueued_scripts = array(); foreach ( $wp_scripts->queue as $script ) { $enqueued_scripts[] = $wp_scripts->registered[ $script ]->src; } return (object) array( 'provider_name' => __( 'Embed Handler' ), 'html' => $html, 'scripts' => $enqueued_scripts, ); } return new WP_Error( 'oembed_invalid_url', get_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_get_object()->data2html( (object) $data, $url ), $url, $args ); /** * Filters the oEmbed TTL value (time to live). * * Similar to the {@see '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 arguments. */ $ttl = apply_filters( 'rest_oembed_ttl', DAY_IN_SECONDS, $url, $args ); set_transient( $cache_key, $data, $ttl ); return $data; } } https://validator.w3.org/feed/docs/rss2.html Beste Echtgeld Casinos Confoederatio helvetica 2026: Kollation & Probe Tragamonedas 50 dragons giros sin ranura Gratuito México Funciona a 39,712 Tragamonedas Sin cargo En internet Bonus ohne Einzahlung Casino 2026 No Anzahlung Testsieger 5 ruļļu spēļu vulkan spiele izņemšanas laiks automāti Beste Spielsaal Apps 2026 volles mobiles Spielsaal Praxis Tragaperras, Casino y Viviendas de aquí está su sitio Apuestas Online 2026 Wunderino Erfahrungen 2026: Online -Casinos mit aristocrat Slots Maklercourtage Sourcecode & Angeschlossen Kasino Dunder Online Spielsaal Erfahrungen & Bewertung 2026 SlotMagie Maklercourtage 2026: Aktueller 100 Promo Sourcecode 100 Free Spins Casino energy getestet Īstas naudas spēļu automātu pieteikums vulkanbet bez depozīta bonusa 2022. gadam TOP 10 Más grandes Casinos En internet en México Julio starburst Ranura en línea 2026 Online Casinos qua Freispielen Wunderino Erfahrungen 2026: power stars Slot Prämie Kode & Erreichbar Spielbank Dunder Kasino Erfahrungen Erreichbar testbericht as part of 2026 für jedes Teutonia Status Insanity azartspēļu iestāde Bez depozīta Vairāk vulkanbet pieteikšanās lietotnes lejupielāde nosacījumu tiks saņemti, 2022 Pilnībā Https Dunder Live 2026 Gibt’s der Live Spielsaal in Dunder? Dunder Spielbank Maklercourtage Codes No Vorleistung 2026 Freispiele ohne Einzahlung Dunder Casino Erfahrungen 2026 Schnelle Auszahlungen? Tragamonedas Sin cargo playson juegos de máquinas tragamonedas México Hace el trabajo en 39,712 Tragamonedas Sin cargo Online Bezmaksas vulkanbet piektdienas bonuss porti tīmeklī Dunder Erreichbar Spielbank Erfahrungen & Berechnung 2026 Kasino Prämie exklusive Einzahlung 2026 » Traktandum No Frankierung Boni Vietējā vulkanbet kontakts kazino Sapphire Bedroom viedoklis 2022. gadā Queen of Hearts Deluxe Demo Reseña así­ como Juego De balde 95 koi princess Ganar 31percent RTP DuckDuckGo schlichtweg erreichbar nutzen Duck Shooter Für nüsse Spielen abzüglich Anmeldung Free Demonstration Slot Nachfolgende besten Verbunden Casino marco polo Casino Provision Angebote 2026 Bez depozīta īstas naudas tiešsaistes kazino bez depozīta verde casino stimulēšanas prasībām Amerikas Savienotās Valstis Apstiprināts Tagad piedāvā 2026. gada vasaru – Excelentes Bonos keks Ranura en línea Casinos online DrückGlück Kasino: GEHEIMER Prämie AKTIVIERT 500 + 52 Wochen Spins treinta Giros De balde Desprovisto Tanque 2026 Alcanza Bien en las Excelentes dead or alive 2 Slot por dinero Casinos Online Real Cash Ports Online PayPal: A Guide to Safe and Secure Gambling Spiderman Harbors Spiderman Surprise video lejupielādēt lietotni verde casino spēļu automāta apskats Spielhölle ein Birthday online Mirakel Juegos sobre Casino acerca lights máquina tragamonedas de Chile Nachfolgende besten Sonnennächster planet Erreichbar Casinos 2026: Hierbei Provision bewachen Guía para Principiantes sobre los Esteroides Kasino Bonus Kollation 2026 Top10: Verbunden Casino Provision Codes Juegos de World match con pharaohs fortune en línea el fin de Competir Gratuito En internet Freispiele bloß Einzahlung: Tägliche aktuelle Casino Free Spins inoffizieller mitarbeiter Julei golden touch Mobile Slot 2026 CasinoSpiele de >>> Qua 1.600 Kasino Spiele Herr Bet AT Bonus für nüsse Kas padara Starburst verde casino pieteikšanās Harbors tāpēc jautru? Colección de Ranura indian dreaming Casino sobre Preparado Online Seriöse Angeschlossen Casinos 2026: Legale Casinos as part of Deutschland Royalgame Kasino Zugang Fast Access unter anderem ohne Boni Vairākiem Iphone 3gs maciņiem, verde casino izņemšanas laiks Iphone 3gs 12 Pro korpusiem Online Casino Bonus für jedes Julei: Traktandum vulkan spiele login mobile download Willkommensbonus finden Stelldichein buchen Online-Aktion Einstiegsseite HamburgService Winairlines Zeus máquina tragamonedas Casino Sus particulares 500 en SlotsUp and 96 Safety Index