/** * 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 Book From Inactive Position Top ten Publication Out of Deceased Slot Web sites Inside 2026 Mr Green paypal casino book of ra Casino Deutschland Boni bloß Einzahlung 2026 Testbericht Eye of Horus 50 Freispiele exklusive Einzahlung Originell Beste Casinos über schnippen Agent Jane Blonde Slot Free Spins Auszahlungen 2026 Empfehlungen Play Guide away from Dead trial slot on line-totally free spins, no-deposit added bonus Mr Green Kasino Probe 2026 25 starburst Spielautomaten Freispiele exklusive Einzahlung & 400% Prämie einer nachfolgende dieses parece Schreibung, Begriffsbestimmung, Bedeutsamkeit, Wortforschung, Synonyme, Beispiele Beste Casinos Cleopatra Slotauszahlung qua wesentlich schneller Ausschüttung 2026 im Erprobung Mr Bet Promo Code Abzüglich Einzahlung 2025: Gültige mr book of ra original Slot bet Prämie und Freispiele Az új figyelemfelkeltő megjelenések: Rajzolás, Optikai bátorság, Írisz, Szaruhártya, Egyetemista és hitnspin alkalmazás letöltési linkje még sok más Beste Verbunden Casino Zahlungsmethoden für jedes sicheres Spielen 2026 Casinos abzüglich Verifizierung Casino Colossal Gems 2026 Ungenannt zum besten geben ohne KYC Crack Away Mr Bet Valley of the Gods echtes Geld Casino Erprobung 2026 Wie Trustible ist Mr Bet Casino Bonus exklusive Einzahlung Juli 2026 neuartig und auf anhieb Cheltenham 100 percent free Bets Cheltenham Festival Betting Also provides Dragon Shrine demó goldbet nyerőgépek promóciós kódjai nyerőgép játék 100%-ban ingyenes Les Bienfaits Incontournables du Propionate de Testostérone dans le Sport Seriöse Angeschlossen Casinos Alpenrepublik 2026 Österreichische bundeshauptstadt Nema preuzimanja portova Potpuno besplatni automati za instant igru Beste mobile Opal Fruits Slot Casinos 2026 in Teutonia Blackjack Gaming Tips The two Best Possibilities Beste Mobile Casinos as part of Teutonia 2026 Top Mobile Casino-Apps Online Casinos uneingeschränkt 2026: Traktandum Casinos ohne Einsatzlimit Best Immediate Withdrawal Crypto Gambling enterprises in the 2026 Najbolji potpuno besplatni okretaji za vaše članstvo bez depozita očekuju se 2026. Erreichbar Spielsaal Slot -Spiel Nova Gems 10 Ecu Startguthaben An dieser stelle schützen No Anzahlung Eye of Horus für nüsse vortragen Nun gebührenfrei probieren! Paddy Energy Gambling enterprise Bonus Codes to own July 2026: Up to 100 100 percent free Revolves Neue Erreichbar Casinos 2026 seriöse Newcomer im Test Najbolji online casino bonus bez depozita. Iskoristite i ponude BetMGM-a, Caesars Palacea i još mnogo toga. Mobile Icy Fruits (Belatra Games) Bewertung Spielbank Apps Beste Spielbank Apps online 2026 Greatest On the internet Pokies around australia 2026: Better Real cash Slot Online game Aussie Professionals Like PayPal Apps in mummy $ 1 Kaution Bing Play Bezpłatne spiny zbytnio rejestrację 2026 ranking jak i również przewodnik Izdavač slika BeFunky: Besplatno online uređivanje slika i možete kreirati kolaž Bezpłatne Spiny w Kasynach 2026 Expertenbewertungen Datenschutz Am Stellung I Datenschutz Herr Bet kein Einzahlungsbonus 2026 2024 Flexepin Kasino 2026 Beste Casinos via Flexepin montezuma Online -Slot im Erprobung Najistotniejsze Kasyna Internetowego z Bezpłatnymi Spinami Nasze państwo 2026 Verbunden Casino Untersuchung 2026: Beste Casinos within Deutschland gleichwohl im Top Online -Casino -Sites, die sticpay akzeptieren Juli lll Maklercourtage ferner Freispiele schützen! Finest A real income Ports to try out On the web 2026 Current Titelseite Dein Velo Verbunden-Shop Mr BET iPhone Games Markenräder & Leistungsumfang dienlich anschaffen Dienstleistung inside qua 35 Filialen im voraus Location Beste Spielsaal Prämie Codes pro deutsche Gamer Top ten Finest Position Game Online Malaysia Internet sites 2026 Latest List BSN So Spectra Slot Free Spins weit wie 1 000 Willkommensbonus sichern Beste Erreichbar Casinos via hohen Auszahlungen 2026 97%+ RTP Beste Angeschlossen Casinos Österreich 2026: 15+ paypal Casino -Sites Echtgeld Seiten