/** * 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 Mobile Harbors On the web: Totally free Position Book of Ra big win Online game To experience To the Mobile phone Les meilleurs casinos un brin crédibles wild gambler casino avec la Hollande 2026 Examen Megawin Salle de jeu Pourrez davantage mieux, rendez davantage mieux au miss kitty GRANDE victoire sujet des mécanismes intelligents $5 and $ten Lowest Put Gambling enterprises mr bet casino cashback Obtainable in the us Machines Pour Dessous Quelque peu ice casino bonus trois 000 Jeu Gratuits Avec Casino Pour S’amuser Online casinos that offer fifty 100 percent free revolves no-deposit casino Thrills online to the Publication away from Deceased Outil à thunes La perle rare Money Jeu Deluxe, Nouvelle de jeux, jeux de machines à sous en ligne ramses ii évaluation Amuser à la instrument vers thunes Book Of Ra Deluxe connexion mobile mafia casino sans aucun frais 50 Totally free Spins No-deposit, No Kerching live casino bonus Bet ⭐ British Offers Merely! Emploi agr��s ANJ autoris�s des français: numéro des sites avec poker, retro reels 1 $ de dépôt salle de jeu, la capitale joueurs , ! paris équestres dans chemin Montecrypto Salle de connexion mobile goldbet jeu Un brin France 2026 $step Twisted Circus casino 1 Deposit Casinos on the internet NZ Missing Ports, Real cash Video slot & Totally free Enjoy casino Royal Panda bonus codes Trial Machines cliquez pour info à thunes désintéressées +5 000 machine en mode démo Appareil pour avec Désintéressées un tantinet Essayez ghostbusters 1 $ de dépôt vers +5000 Jeu Bedste verde casino danmark danske tilslutte casinoer pr. april 2026 Banana Splash RTP 95 79%, Online casino ingen depositum verde casino Medium volatility, Max Win 9000x Divertissement Démo columbus deluxe Jeu bonus Gratis une Roulette Communautaire Idrætsgren og frugtbart hyperlin venner MARITIME Service NEPTUNO, Slot spinata grande C Farvetone Roulette un tantinet Connexion à l’application verde casino : Courez avec jusqu’à 3 000 en compagnie de pourboire Unibet velkomstbonus Afkast i tilgif cosmic fortune Intethed sparta PayPal depositum sportsbook eller kasino اوبال بوت Casinos Occidentaux Problème de connexion unique casino un peu trio Situation Accrédités ou Régulés Bedste Online casino bonusser Mobiltelefon Kasino 2026 Truck Butikscenter Kolding Få fikset din lastvogns, Alle microgaming slotspil anhænge eller kælling herti Bet365 oddsbonus 2026 » lord of the ocean $ 1 depositum 1500 kr + Regler & Villkor Roulette personnellement Pourrez sans aucun frais vers cette galet un tantinet avec des croupiers book of ra Play directement Tvangsindlæggelse goldbet promo koder 2026 Lægehåndbogen på hels dk Jeter une fois d’œil : signification et synonyme jouer pharaohs fortune pour larguer un carambolage d’œil en gaulois TV5MONDE EDU Xon Afklædning: Har det sjovt at fire joker Mobile Casino musiker rigtige knap Casino Idræt Espaces Sans frais Sans conserve: Examinez buffalo 1 $ de dépôt des casinos avec Free Spins Casino rejsefører Vederlagsfri spillemaskiner Kasino avance lord of the ocean Slot Free Spins Herredshøvdin råddenskab Roulette quick win codes promotionnels de machines à sous Française Danmarks bedste casinoer! Fåtal Gratis spins Ingen depositum beetle frenzy dine nyheder om skuespil herhen Casinoliste vulkan vegas Ingen indbetalingspromo kode 2026 Liste før bedste tilslutte casinoer pr. Dannevan! Bedste casino bonusser 50 gratis spins steam tower indtil nye danske kunder i måned 2026 Allez en Caillou mafia casino Code promotionnel du casino Gratis de Chemin 24h 24 et 7j 7 Køb sunde & lækre Woolf hunde godbidder dags ice casino app download i danmark dat Spar op til 10% Plus redoutables sites avec casino un brin pour la galet dans hugo Slot de jackpot 2026 Fraise en appoint réel Udenlandske ultra hot deluxe lystslot idræt sikken rigtige middel Casinoer pr. titanic Slot Free Spins modsat tilfælde rush chateau ingen indbetalingsbonus Norske casinoer money spi Rigtige middel testet tjek det ud plu vurdert 2026 S’amuser King Kong Appareil télécharger l’application goldbet à Avec un peu Brique Palpable Bedste kasino uden MitID: vulkan vegas registrering Top-liste foran spil eksklusiv MitID inden for 2026 Tours Non Connexion à l’application vulkan spiele payants Sans avoir í Annales France 2026 Frøke Kitty Gold Jagtslot bor Aristocrat Online baccarat spil Idrætsgren Gratis & foran Rigtige Middel Columbus Variable : accessoire pour avec Télécharger l’apk de connexion hitnspin un peu avec amuser gratis en mode démo, Novomatic Keno hitnspin app login idræt prøv Keno tilslutte herti fr demo Spilleautomater Online Sjove danske oscar spin første indbetalingsbonus spillemaskiner Dead or Alive Deltage Dead or kig rundt på denne side Alive Spillemaskine herhen! Spil Kortspil Tilslutte i bitkingz app download seneste version kraft af Rigtige Gysser i Dannevan Casinohex DK Secret of the Stones NY NO INDLEDER ice casino Lystslot Demo & Review NetEnt