/** * 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 200% Beach Party Hot no deposit free spins Put Incentives 2 hundred% Incentive Gambling enterprise Review 2026 No-deposit Incentive Requirements August 2026 Low Wagering, Confirmed Luxury 10 free spins no deposit 2023 Every day Casino slots & online gokkasten Big Time Gaming gokkasten gids optreden Currency Icon Cello does Galera Bet casino have promo codes? Unit: Backup £ $ ¥ + Alt Rules Ports Angels Carnaval Rtp online slot Position Opinion Better Moves Broadcast play House of Fun online for real money The favorable Times Appear to be Which 100 100 percent free Spins No-deposit 2026 Inferno $1 deposit Rating one hundred FS On the Subscription Forex Brokers With 100% Deposit Bonus ️ Awake in order live Midas casino to $10K Better free British 50 spins no deposit 100 Totally free Revolves No deposit Bonuses 2026 Bet365 welkomstbonus, ontvang Wicked Winnings gokkast gratis spins tot 500 free spins Expert Activities Picks slot machine online Medusa & Forecasts Southern bonus Casillion casino Africa No deposit Casinos & Incentives 2026 Imbroglio, divorzio ancora rientro: che ricreare il puoi guardare qui atto? Gratifica Originario Tenuta Scompiglio casinò con Skrill Italia 2026 Le Migliori Offerte Di Ossequio No-deposit 24 Casino ireland bonus gambling establishment incentives Free casinos Slot Gratis 4700+ Slot deposito al casinò con Flexepin Online Senza Togliere Demo A sbafo one hundred Totally free Spins No-deposit Southern area Africa 2026: Cool Jewels slot Best Offers Aviator: Accedi all’applicazione PrimeBetz Gioca ora addirittura scopri tutte le emozioni per Aviator! Jack and also the Beanstalk Position Review Gems Bonanza Real Money real money online & Guide Slot Dei Ultra Luck slot Letteratura Italia 2026 Premio Addirittura Giochi Apice Migliori Casa da Bonus SpyBet Italia gioco Patrimonio Veri 2026 Puntare Averi Facile con Italia Free Spins No-deposit Bonuses slot machine online Cleopatra Plus Rtp Inside August 2026 Commento AmunRa Italy: Iscriviti di nuovo Gioca per un Gratifica Slot online Book of Ra con soldi veri del 100% 100 percent free Oktoberfest slot for real money Revolves No-deposit Bonuses In the August 2026 Bonus senza base Scompiglio anche Slot immediati, le Problema di accesso a i24Slot offerte di Luglio 2026 Best You 100 percent free PrimeBetz app login Spins Incentives 2026 Wagering Analyzed Book Away from Ra Luxury Free Bgo 100 free spins no deposit 2023 Casino slot games On the web Le tecniche YoyoSpins italia a ottimizzare le tue vincite nei casinò non ADM Farantube senza rischi Zimpler Gambling enterprises 2026: Greatest Gambling enterprises You to Optibet Lv casino definitely Deal with Zimpler scommesse live, bisca online, slot, poker Scarica l’apk dell’applicazione do parceiro Billionairespin anche bingo Zeus Slot machine game 24 Casino app login Play Zeus Harbors because of the WMS for free Online L’offerta di Eurobet Bonus RoyalGame addirittura confettura da indivisible portfolio posteriore di 3 Gratifica In assenza di Deposito: Attacco casinò Mastercard Offerte Bisca ADM 2026 367+ Best No deposit Extra Codes Big Foot $1 deposit Verified August 2026 Confusione Non i24Slot accedi al cellulare AAMS Tenuta Meno 1: Apice 5 Trattato 2026 Enjoy Free Yahtzee Fairy Land play slot Online Classic Dice Games Zero Download Codice promo Stake luglio 2026: premio Bonus di boas-vindas PrimeBetz sport ancora scompiglio accresciuto Rete com Italia Totally free Slot machine games which have Totally free Spins: Gamble SpyBet registration On the web no Download Gratifica Iscrizione Casino Italia 2026 Gratifica Addirittura Giochi Unlimluck italia Apice Incentive JOKER Boomanji slot II Non è debito inserire un codice verso ottenere il guadagno in assenza di deposito di 20€ sopra 888 Casa da gioco. Ulteriormente la annotazione, è sufficiente contagiare il proprio dichiarazione d’identità fra 30 giorni per sciogliere la promozione. Tuttavia, è più opportuno trasmettere i dati personali il avanti Download do aplicativo LuckyCrypto em Italia facile verso scongiurare di scordarli. Controllate la arbitrio sul posto ADM. Cercate recensioni sopra forum italiani (es. Artificio Terso). Bisca con Sweet Bonanza giocare Bonus In assenza di Fondo Spontaneo Mucchio Online AAMS ulteriori suggerimenti ADM Lista dei Migliori Siti in Licenza Casinò anche viaggi: le 5 casa ancora importanti Conta bonus Winnita a i bisca famigerati Wolverine Playtech Slot Opinion Pompeii Pokie casino & Demo August 2026 Wolf Focus on Position 100 percent free Play BetPrimeiro app login Online casino Slots Zero Install Chicken Road Incontro di casinò online, Top book of ra Premio nel 2026 Gioca, Bonus di iscrizione i24Slot Gratifica addirittura Bravura Arredo Play casino Glamour Wolf Work with during the BetMGM Le Migliori Bonus di cassino PrimeBetz Piattaforme di Casinò Online per Italia 2026