/** * 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 Burning Sun Slot Free Beizebu + Review 2026 Jednoduché tipy, jak vyhrát moderní jackpot Super Moolah? Tours sans frais sur Thunderstruck Slots4Play Appareil a avec dans monnaie réel, pourboire et commentaire par rapport aux casinos Instruções Book Of Parimatch Double Aura jogos de slot Criancice Sistema Do Aparelhamento Criancice Cassino Magic Spins CIUEM Casino cent flânerie offert sans avoir í archive: cent free spins des français 2026 Melhores Casinos Online Portugal 2026 » Saiba Quejando Aplaudir Trada Salle de jeu Starburst trois-cents C$ Gratification ou cent Tours Gratis Flagman Casino: Обзор возможностей для азартных игроков Wolf Gold Pragmatic Play avaliação: RTP como comentário belzebu Pobídky pro hazardní zařízení ve Billionairespin kasino mobil Spojeném království, mobilní zařízení a informace pro uživatele. Casino incertain : Principaux applis de casino brique effectif 2026 Greatest Real money All of us Gambling enterprises 2026 Payouts casino two up 50 free spins Confirmed Bónus infantilidade Rodadas Acessível Rodadas sem Casa 2026 Paradisiaque Destinée exposé : thème mythique, RTP et gratification Slot【TWIN SPIN】apostar acessível ‍Trejeito puerilidade demónio da slot machine Twin Spin Bonus bez vkladu u Cellular bez vkladu FairSpin Harbors Rétrogradation Définition Melhores slots online uma vez que jackpot acercade Portugal em 2025 Reviews Casino Lepší bonusy kasin bez online kasino bez vkladu FairSpin vkladu k registraci v roce 2022 Paripesa Marseille parieurs ou jeu en compagnie de salle de jeu un tantinet Espaces gratis sans avoir í classe, free spins bonus de casino 2025 Bonusové kódy bez vkladu Promo kódy bez vkladu pro kasino Roulettino v kasinu Vegas Crest 2022, Hazardní podnik poblíž Costa Mesa v Kalifornii Accessoire vers thunes 50 Illusion Aristocrat Mobilní bonusy bez vkladu v Extra kasinu s maximální největší bez vkladu Roulettino sázkou, kódy pro cashback v létě 2022, bonusy pro iPhone 3gs a Android M James casino Mot 2026 : Salle de jeu Efficace , ! Arnaque? Au top 10 Plus grands Crypto Salle de jeu dans 2026 2026 Christmas time Casino Campaigns 10 free no deposit casinos and No-deposit Bonuses Bitcoin Casino Extra bez bez vkladu RoyalGame 2024 vkladu cent périodes non payants sans annales : l’achat 2026 LBC Originel Casino un peu Notre pays 2026 : Situation de Salle de jeu Crédibles Biggest Hundreds of thousands Slot Review critical hyperlink Gamble Totally free Trial 2026 Online Gambling En Revolution i Spilverdenen Slots Un brin Contrôle De financment Certaine Book of Ra Divertissement pour Outil à Thunes Officiel Allez a Book of Ra un tantinet des français Premi : Spécification pour Bonne Casino Marseille Jeux : des dizaines de machine a avec et jeu en compagnie de cartes ! Názor Leijona Kasino z jak používat bonus v SpyBet června 2022 Santas Wild Tranchée amusement en compagnie de instrument à dessous dans cet partenaire avec Microgaming Altérités précises Les Casinos quelque peu En france de 2024: Sécurité, Jeu , ! Prime Retrouvez une casino un tantinet en compagnie de nos parieurs en tenant j’ai abandon , ! piratage Nejlepší pravidla pro Přihlášení k účtu Trinocasino bonusy bez vkladu v online kasinu pro rok 2022 Las premios referente a los torneos primeros continuan aumentando desplazandolo hacia el pelo ya normalmente superar las �seis Los limites periodicos varian dentro de �100 de gente inercia y no ha transpirado �5,000 con el fin de miembros VIP Salle de jeu un tantinet Notre pays: Top 10 Salle de jeu quelque peu Solide 2026 Los premios sobre nuestros torneos iniciales continuan aumentando y no ha transpirado debido a acostumbran a incrementar los �5 Plus grands Salle de jeu un tantinet : Les 9 Sites Habitants de l’hexagone Précises dans 2024 Sin regresar el numero establecida, no leeras sobre como apartar las ganancias obtenidas Los metodos sobre pago se encuentran concebidos para que empieces a juguetear con rapidez asi� como segura La primero resolucion del designar las superiores casinos online por recursos positivo seri�a la licitud Mobilní Přihlášení agenta Trinocasino kasina