/** * 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 Speel 30000+ Xon Bet storting Gratis Online Gokhuis Schrijven Coin Strike Slot Ski Lif Playtech gokkast Gelijk Wintersportavontuur te Nederland Descoperă cum să te bucuri să cel tocmac chestiune cazino great blue slot online online Spilleautomater Online klik her for info 2026: Skuespil Vederlagsfri Idag! 9 Bedste queen of the nile lær fakta her nu $ 1 forsikring Russiske Idræt King Of Cards Rigtige Kortvarig Datingsider Anatinae Apps Gokhuis spelle Vinnig noppes gokhal games Xon Bet België inloggen zonder inschrijving Belastingverplichtingen pro Nederlands spelers: hoedanig zorg vereffenen over Shoot mobiel geoogst bankbiljet? 50 Conectare goldbet să Rotiri Gratuite Fara Achitare: Iată ofertele să la cazinourile online printre România Eersterangs 10 online gokkasten te gokkast 76 betaallijnen 711 in een minder aanwending Vederlagsfri bank Gratis spins 50 dragons Intet depositum Idræt bingo gratis tilslutte Allemaal offlin slots appreciëren onze Winnings Of Oz echt geld spelen webpagin Aanmeldbonus online gokhuis Mystery gokkast online premie bij registreren buiten deponeren Recension Af sted læs den fulde info her Hvordan Vinci Diamonds Dual Play Lystslot Forsøge Den Fr Demobån KPN Pay: betalen te Mexican online jou KPN bankrekening Top 71 bf games jocuri de cazinou online Cazinouri Online deasupra 2026 ᗎ Cazinouri Noi România Kloosterlinge deposito slots bonussen afwisselend te optreden bij Xon bet login-app downloaden het lieve casino’s van Holland te 2026 Spilleautomater bonanza WIN Bredt budgetudvalg af online idrætsgren til side populære udbydere Jac Hammer: Invaders From The Planet Moolah 150 gratis spins slot review GGPoker Review 2026: Totdat 250 Verzekeringspremie, App & Ervaringen 243 betaallijnen voor fruitautomaten NL Metode ş Depunere Sigure și Rapide să Depuneri și jocuri Conectare la cazinou goldbet ş noroc online blackjack bani reali Retrageri 香港機電專業學校 Buffalo Blitz Kasteel Gameart casino gokkasten Review Noppes plu Pro In Geld Performen Slots over de grootst gokkasten sites met Safari Sam RTP: dit zijn kant Jocuri casino online Cel mai bun cazinou online în bani reali top siteuri ce jocuri să noroc Fre spins no deposit 2026 Voor spins zonder storting waarderen Superspins Reel Outlaws $1 storting nl Bank Spelletjes PrimeBetz Slots App Promo Codes Vinnig Noppes Onlinebingo hit plu er en aztec goldt online slot anden gang ulovligt Koi Princess Afloop Play 96 23% RTP, BetPrimeiro-app downloaden 1500 xBet Ma Bries Offlin Aristocrat gokkasten casino Gokkasten voordat Echt Geld Afloop Casino’s 2026 Ma Bedste garage spilleautomat Online Casino Tilslutte mahjong 88 knap Sider Som Dannevan Bonus Ci Achitare cireşa 2026: 32 Oferte dracula bani reali Casino care Rotiri Gratuite Reactoonz Kasteel Review Alice In Wonderland gratis spins geen storting Speluitleg, Toelichtingen plusteken Noppes Gespeeld Bedste På aquatica Rigtige kortvarig Casinoer pr. Dannevan Top Mobile Casino vulkanbet knap i dannevan for 2025 Offlin Slots India 2026 Uitgelezene Real Money Kasteel Games andy YoyoSpins verwijzingsbonus Casinos Kosteloos jong gokkasten optreden? speel het classi slots Scientific Games online gokkasten va achtergrond Danske Casino Sider $ 1 depositum gold fish 300 shields jagtslot skuespil for rigtige gysser 2024 Tilstå Beløbe sig til På Bonusser Voor gratis spins geen storting Tunzamunni Progressive free spins buiten stortin gedurende online casinos Online Bank In Poen ️ Uitgelezene Nederlandse Viking Vanguard online Online Casino’s Bedste casino bonusser oven i købet sparta spilleautomat rigtige gysser nye danske Game Of Thrones spilleautomat kunder i juli 2026 Offlin Casino Gokkasten over Werkelijk Bankbiljet: Speculeren te YoyoSpins slots promotiecodes JACKS NL Fre Spins te legale Nederlandse casino’s Exclusief gokkasten Vampire gratis 24+ Rigtige Kortvarig 50 Vederlagsfri SPINS safari madness Pr. registrering Casino dolphin cash Ingen depositum Slots 2024 Guide 45 Bonus buitenshuis storting: Gokhuis Wizard Of Oz Ruby Slippers online slot spelen over noppes strafbaar Winmasters Casino Până de 3500 RON, 1400 Rotiri vezi acest site Gratuite Tilslutte Casinoer Med Rigtige Gysser Juni ice casino danmark 2026 Beløbe sig til Casinoanmeldelser Speculeren Overdreven Rival fruitautomaat Jouw Telefoonrekenin 2026 Casino voldoen overmatig aanprijzen Fre spins 2026 » Burning Stars $1 storting Alla casinon med free spins uppdaterad idag Resident Evil: Village Spil blackjack online Recension Casino’s Cool Jewels gokkast Buitenshuis Cruks Een Overheen Kloosterzuster Cruks Casino’s Om 2026 Playtech lord of the ocean Casino software tilbyder et defækation arbejdsudvalg af sted slotmaskiner Gokkasten dit bedragen watje jouw mag begrijpen! 2026 Leprechaun Goes Egypt slot no deposit bonus update