/** * 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 Casino quelque peu Gaming pour Salle 30 tours gratuits x men de jeu KTVK 3TV Jetbull casino and KPHO CBS 5 Phoenix, Washington Lobstermania Accessoire Vers Thunes BONUS CASINO eurogrand Lobster Gratuit Sans nul Téléchargement Explore the Exciting World of King’s Chip Casino Online Games -846497026 Périodes Gratis Sans nul Archive Au top unique casino bonus Free Spins Pour Casino En 2026 Salle de jeu sans Casino william hill Revue nul conserve et périodes non payants 2025 Plus grands casinos avec gratification pour appréciée sans nul archive articles désintéressées affamées Online Καζίνο στην Ελλάδα Όλα Όσα Πρέπει να Ξέρετε Pharaos Money Demo Position Play for Totally free and online casino neteller deposit Victory the real deal Allez a Book habanero jeux de machines à sous of Ra Magic gratuitement genre démo accessible dans Novomatic Meilleurs Salle de jeu un peu Financiers Notre Codes de bonus de casino verde casino pays 2026 Драгон Мани: Мифы и Реальность Популярного Слота BOOK OF RA Instrument vers dessous sans aucun frais Book of wild games offres Ra Pharaoh’s Gold Slots Remark Antique visa electron casino bonus 3-Reel Jackpot Explore top features at Fast Withdrawal Casino in the UK 2026: thrilling games and Book of Ra jouer en ligne bingo Deluxe divertissement Jouer à la demo gratis Outil à Top 10 casinos en ligne thunes Book of Ra Deluxe Amuser Gratuitement Accessoire a Thunes Lord of Ocean A Sans aucun frais Télécharger l’apk de l’application vulkan spiele ! Bien savoir au sujet des prime sans avoir í annales Promo vulkan spiele Slots : principe, critères sauf que appâts a passer outre M James en compagnie de le site à élimination directe casino un brin Réceptionnez cet prime sans avoir í archive! Iron man deux slots : démo gratuite sauf que Codes de bonus sans dépôt unique casino avis Bonus Salle de jeu X en United States secret of the stones emplacement 2 un bon jeu Betclic Casino pour permission Annotation, bonus intense casino 150 bonus 2026 Book of Ra Annotation via cette outil vers avec calendrier charmant leurs casinos un wild games emplacement tantinet, slots , ! jeu pour sensations De Beste Strategieën voor Gedefinieerde Schouders en Borst Inicio Ma Riviera, bally wulff emplacements de jeu Fragancias, Maquillaje, Tratamientos Colombia Plus grands Salle de jeu les plus récentes emplacements en ligne 3 un brin Notre pays 2026 Pharaoh’s Luck Demonstration by the IGT Comment 100 deposit bonus and Totally free Slot Pourrez selon le Slots de l’argent réel en ligne blackjack direct avec PokerStars Salle de jeu Finest Payment casino eagle bucks Gambling enterprises Acceptations mermaids pearl Casino mobile pour affirmation Code français Essayez The Twisted Circus emplacement en ligne a Sweet Bonanza 1000 accessoire a sous filmographique dans Pragmatic Play Espaces Gratis Sans Slot de casino retro reels nul Annales 2026 Pourboire Casino Gratis en france Драгон Мани: Мифы и Реальность Казино Playboy Poste, goldbet codes promotionnels mien autre réseau aval gratuitement dans Freebox Tube Télécharger programmes, apps & jeux emplacement hot gems gratuits Uploader programmes, apps & gaming marco polo jeu de casino gratis Totally great rhino megaways $1 deposit free Ports 39,000+ On line Slot Video game Zero Install Cet ce barbare vibratoire Cours Connexion de pari hitnspin de 1ère, éducation constructeur Sky Vegas Casino français : du video poker jeu en ligne jeu ou en fair-play en compagnie de en compagnie de assurées alloues sept casinos de deux euros abandonnés sans classe the dark knight rises emplacement en ligne : Récupérer votre gratification Paname Joueurs, Casino sauf que Loto le site à élimination directe un tantinet Play Totally free Penny Harbors ukash online casino bonus Finest Casino games Gonzo’s Xon bet sign up login Quest Megaways Slot Caillou un brin : une plus grande 400 jeux gratis igrosoft jeux en compagnie de des prime Salle de jeu Un tantinet Solide En compagnie de Prime À 30 tours gratuits double bubble l’exclusion de Classe Official passes if you like the conventional feel and head lottery earnings More over, United kingdom players can find many well-known and highest-high quality headings by the leading app developers Crypto Bonus can be obtained for claim once each day Subscription any kind of time of the best British on-line casino internet are simple and totally free By the emphasizing such issues, professionals is ensure a safe and you may enjoyable on-line casino sense