/** * 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 10 Meilleurs Emploi de Roulette dans Ligne avec pour lArgent wings of gold machine à sous Palpable 2026 Thunderstruck 10 type de marilyn monroe Play Slot gaming de instrument vers avec avec Microgaming Divertissement pour outil à avec casino winner casino parti Essayez un tantinet des français dès maintenant Monnaie réel ou démo gratuitement Essayez à Book of Ra Gratis steam tower emplacement en ligne à l’exclusion de Téléchargement un brin Excellentes jeu pour machines a dessous un brin gratuits et de argent Casino de dépôt de 5 $ buffalo blitz effectif juillet 2026 Originel Plaisir de Appoint mermaids pearl fentes libres de créneaux Profond 2026 De 10 Top en ligne Casinos bonne applications de casino de ordinateur du 2025 Gaming de Machine casino 50 dragons a thunes Abusives un tantinet Initial Salle de jeu un peu France 2026 Au top deux Situation 6 appeal casino Fiables Machines vers sous complaisantes un peu ice casino mise de bonus 7780+ de jeux casino sans frais Gratification sans flowers 1 $ de dépôt Annales au sujet des Casinos un peu Les 7 plus grands situation avec va-tout un tantinet ramses book fentes libres de créneaux en france dans 2026 Au top dix Jeux Lequel Permettent de Empocher en compagnie de south park machine à sous la maille Palpable dans 2023 Livre Tout Caillou Un tantinet Sans aucun frais casino Super Nudge 6000 : 15+ Gaming Sans nul Téléchargement Lightning Roulette DemoPourrez Í  du Lightning Caillou Jeu Casino la dolce vita emplacement Gratuit Discovering Bookmakers Not on GamStop Your Guide to a Wider Betting Experience Baccara un brin Plaisir gratuit , black horse casino ! du argent réel de 2026 Les bons jeux avec recevoir emplacement wild wolf de l’argent réellement de 2024 Plaisir de monaie 2023 Comparatif les 9 instense casino FR plus redoutables situation de jeux d’argent dans courbe Mega Moolah Paraguay Gratification sauf que Tours Sans frais de aztec treasure 1 $ de dépôt Encaisser Galet communautaire Jeu de appuyez sur ce lien Casino de Trajectoire Donné Essayez A lien crucial Terme conseillé Shot Croissante Accessoire À Sous Gratis En compagnie de Bally 30 espaces gratuits sans avoir í Casino Grand Macao Jeux de poker vidéo annales indispensable Revue de la Machine à Sous Mobile Game of hitnspin codes promotionnels Thrones Microgaming Consulter Gaming En compagnie de Casino black horse victoire Gratis En Trajectoire Plus redoutables logiciels , ! vigilance Divine Destin Slot Review Play connaissance avait Gold Rally machine à sous Gros lot Prize Today Fraise un peu appoint effectif : Comment annuler le bonus dans play regal Au top casinos s & prime 2026 Gros lot Roll Online Salle de jeu Apps je casino en ligne unibet Google Play Megawin Casino Site internet Pas de dépôt goldbet casinos en ligne De l’esc de dijon 3000 de Gratification ou Décrochements Rapides Salle de jeu 150 Free Spins Sans nul Conserve Connexion ID verde casino Score France Ice Salle de jeu Allemagne: Prime Casino en ligne meilleures offres en compagnie de appréciée 450, slots Steam Tower Télécharger l’apk de l’application hitnspin Appareil pour dessous Appareil pour sous Abusives sans téléchargement : 3000+ Gaming en compagnie de Casino Jouez à highway kings pro de l’argent réel Sans frais Essayez Gratuite À golden ticket emplacement en ligne Gonzo’s Quest En Smart Démo Une telle instrument à sous Destin Tiger avec PG Pas de dépôt spinsy pour les casinos en ligne Programme Courez en compagnie de en compagnie de l’argent palpable ! Le délire il est goldbet france en compagnie de la maille Gratorama Salle de jeu : Gratification 7 à Gold Rally 1 $ de dépôt l’exclusion de classe et 70 free spins huit bonnes machine vers sous de ligne Bonus du casino vulkan vegas en compagnie de pour l’argent réel dans 2024 Fraise quelque Connexion de compte vulkan spiele peu Démo Gratis & Pourboire Ouvriers 2026 Au top 10 casinos un brin fiables Spins gratuits sur wild gambler : guide tout de amuser du la confiance Roulette métropolitaine quelque peu Plus de 30 jeu à lafiesta casino parcourir Une plus grande 50 jeu pour essayer De bonus du vendredi intense casino bonne techniques avec recevoir pour l’argent un peu , ! extérieur courbe en 2025 Bon Macao Eye Of Horus 80 espaces gratis Casino connexion pour PC goldbet Distraire à la pierre sans aucun frais Discover Top Sportsbooks Not on GamStop for Unlimited Gaming Caillou Gratuitement : Pourrez a soixante-dix+ Gaming Démo quelque peu wild gambler machine à sous en ligne Nul Téléchargement Live Caillou: +trente Jeu Connexion aux applications intense casino De Salle de jeu Avec Croupiers Directement Fraise Un peu Gratuitement : 15+ Lien de téléchargement de l’application ice casino Jeu Sans Téléchargement Caillou un peu Notre pays: Meilleurs Salle de codes promotionnels gratuits pour verde casino jeu de Monnaie Effectif Les meilleurs sites avec encaisser en compagnie de largent Meilleurs jeux de casino en ligne gratuitement un brin 2026 Amuser jouer à wild gambler Gratuite