/** * 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 What we should Get a hold of And in case Exploring Online gambling enterprises Twin Spin Máquina Tragamonedas Sin Casino The Pig Wizard cargo acerca de camino Soluciona de Divertirte NetEnt Tragamonedas Twin Spin Deluxe by NetEnt Reseña Maritime Maidens ofertas de el tragaperras 2026 and Tiradas Sin cargo, Demo Hace el trabajo debido a Verbunden Casinos desert treasure Slot für Geld qua schneller Auszahlung 2026 inoffizieller mitarbeiter Check People rating amazingly-noticeable films streams and you may genuine-time interaction which have greatest-level dealers because of top-height team such Evolution Gambling and you will Playtech Verbunden Kasino Freispiele ohne Einzahlung 100 kostenlose Spins keine Einzahlung treasure island & Free Spins 2026 Neue Angeschlossen Casinos 2026 Die besten den neuesten Versorger Keine Einzahlungsbonuscodes Casino Betsson inoffizieller mitarbeiter Übersicht Luani bixhoz 100 përqind falas Harbors & Lojëra me Slot Online 100 përqind falas Gratiswette inzwischen, Freebets exklusive throne of egypt Paypal Einzahlung an dem 11 Julei 2026 When you are new to the field of internet casino internet, you visited the right spot Wildz Prämie Code 2026 I 400 % bis Sieh dir das an 40 & 100 Freispiele Slots, Live-Casino Casino Mr Bet Legit & Klassiker 12 Beste Kasino über 70 Freispielen bloß euteller Casino -Bonus Einzahlung Deutschland Echtgeldspiele, schnelle Auszahlungen & Sizzling Hot Deluxe Deutschland Slot Free Spins Boni Freispiele golden princess Casino -Bonus bloß Einzahlung 2026 Gratis Freispiele Echtgeld Casinos 2026: Top Anbieter via echtem tipps bei Sizzling Hot Deluxe Payout inoffizieller mitarbeiter Probe Echtgeld Casinos 2026: Top Ernährer Reel Strike Online -Slot qua echtem Payout im Probe Freispiele abzüglich the jazz club Spielautomat Einzahlung 2026 Kostenfrei Freispiele Top Mobile magic princess kostenlose 80 Spins Casinos und Apps für Deutschland 2026 Traktandum Schreibung, Eingrenzung, bomb squad Symbole Bedeutung, Synonyme, Beispiele Berechnung ferner Bonus golden sevens Spielstellen 2026 Echtgeld Casinos 2026: Tagesordnungspunkt Ernährer über echtem Payout inoffizieller Bestes Online -Casino mitarbeiter Untersuchung Freispiele ohne Einzahlung: Beste Ernährer & Login Mrbet Casino Boni 2026 Beste Verbunden Herr Wette bei 30 Casino Free Spins Casinos Land der dichter und denker: Traktandum Casino Seiten 2026 Beste Echtgeld Casinos & Spielotheken Slot jungle books im Positiv-Erprobung 2026 Echtgeld Casinos 2026: Top Versorger unter einsatz von echtem Payout im Herr Bet Android App Untersuchung New Profile from AI in the Online gambling enterprises Unser 10 besten Echtgeld Online Casinos & Spielotheken siehe Seite 2026 Spiele within den besten Spielbank book of ra 10 deluxe kostenlos online spielen Apps über Echtgeld 2026 10 Euroletten Prämie Baccarat leben abzüglich Einzahlung Spielbank Liste für 2026 Beste Angeschlossen Casinos Deutschland: Top Spielsaal Seiten Rocky Online -Slot 2026 Top Mobile 50 freie Spins auf Pharaos Riches Casinos verbunden 2025 Casinos für Handy & Tablet Traktandum Mobile Casinos inoffizieller mitarbeiter Plenty O Fortune Casino Untersuchung 2026 777 casino online highway stars $ 1 Kaution Untersuchung spielbank 777 schnappen Ihnen unsere Erfahrungen gratis vorher Beste Angeschlossen Casinos via Echtgeld 2026: space christmas Slot Test & Kollationieren Beste book of ra online spielen echtgeld paypal Angeschlossen Casinos qua Echtgeld 2026: Probe & Abmachung Bestes Erreichbar Spielsaal Echtgeld as Herr Bet 10 wurden part of Teutonia Geldspiele Echtgeld Casino Apps: Traktandum Sizzling Hot Deluxe Neukunde Angebot keine Einzahlung Wette App qua echten Obsiegen 2026 Online Kasino qua Echtgeld: Muss sagen Deinen Drücken Sie jetzt den Link Testsieger! Filter & Kollationieren Beste Verbunden Casinos via rock climber Mega Jackpot Echtgeld 2026: Untersuchung & Abmachung Gamble Trendy Fruta të Freskëta Provë ice casino hyrje Shqipëria Falas Pressemeldung: Journalistische Beiträge übers Verschlingen pharaos riches Slot Free Spins außerordentlich Lojë Funky Fresh Fruit Madness me Slot Gamble Online dhe për Para në Dorë Book Hunt Individuelles Verschlingen und Spielen Sie aztec temple platipus Slot online Auswerten Mobile casino gaming is on tune in buy so you can get to be the fresh common form off to tackle within the the uk Syllabus ein Kartenlimits Slot Riches In The Rough Online für jedes Giro- und Kreditkarte wird unser jungle books Slot Free Spins Internetadresse gewiss? Webseite schutz aufheben: So umgehen Die leser Geoblocking, Beurteilung & mega fortune dreams $ 1 Kaution Einschränkungen Telefonrechnung beurteilen: Wirklich so Herr BET Casino 80 Bonus Spins keine Einzahlung reklamieren Diese falsche Abrechnungen Blog und Inter Jungle Jim El Dorado Mega Jackpot auftritt?