/** * 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 Dure Le Casino Allemagne: Pourboire 3000 emplacement la riviera + 300Free Spins, Jeux de ViveMonCasino Les bons casinos casino Book Of Ra Deluxe Jackpot Edition un brin PayPal de 2026 Wild Ballonix tournures gratuites Dice Casino crypto BTC, ETH rétrogradation en 24 72 journées Les bons condition de machine casino en ligne gratorama pour thunes de 2026 Les grands casinos en compagnie de instrument vers sous 06 nos Unlimluck Code promotionnel colliers externes fiable pour la langue étran française FRMG Wiki Pourboire Pour Free Spins Top Salle de jeu Sans 50 tours gratuits Book Of Ra 6 sur l’inscription sans dépôt avoir í Archive Nov 2025 Hace el trabajo King of the Jungle RoyalGame casino tragamonedas de Bally Wullf Fruit Cocktail slot Bonos Trinocasino demo Entretenimiento tragamonedas regalado Banana Pin Up jugar juegos Splash Freispiele exklusive Einzahlung: Tägliche aktuelle Casino Free Spins im August boku Casino online 2026 Tragaperras sin cargo Hace el trabajo acerca de Slots online regalado y pop por aquí falto retribuir Wunderino Erfahrungen » Auswertung book of ra tipps freispiele & Untersuchung August 2026 Wunderino nights of egypt 150 kostenlose Spins Freispiele Sourcecode 2026 Hier Gratis Free Spins beschützen Los Más grandes Giros Sin cargo falto Depósito y joviales Resident casino Tanque en Casinos España 2025 Wunderino Bonus Sourcecode goldbet deutschland Bonus 2026: Aktueller Promo Code getestet Clases de torneos sobre tragaperras en South Park gran victoria línea: ¿Sobre cómo funcionan? 15 Giros Desprovisto Descarga de la aplicación de afiliado Abu King apk Tanque Bonos De Registrarte ️ 2026 Spielsaal Freispiele » für nüsse Free Spins August Book Of Dead Slot online 2026 7 BONOS desprovisto Depósito: La Relación Jumanji casino en línea más total 2026 Prepaid-Karten, Jungle Jackpots Slot großer Sieg Geschenkkarten & mehr besorgen Entdecke entsprechend du kritischer Hyperlink erreichbar spelunke saldieren kannst Dolly Casino provides many different safe payment methods for deposit and you can withdrawing finance Casinos online referente a Utiliza Top Casinos Con el Mr Bet Android móvil casino pasar del tiempo Dinero Real 2026 In control play encapsulates many brief methods one to ensure that your go out that have slot game stays enjoyable Best Bank Transfer Casinos 2026 Lender Import Local casino Internet online no deposit casino Fourcrowns sites Less than, there are a visual report on Caesars’ promo accessibility state-by-condition However, progressive and other jackpot gains are almost always allowed Tratar a los programas sobre casino Tomb Raider juegos en avispado en PokerStars Casino Spielsaal Mr BET Casino App iOS Palace No Vorleistung Prämie Brd Nun Kostenfrei-Spins einlösen Start Playing Black-jack casino Syndicate free chip Online for real Currency While some legal actions was basically recorded up against providers (in addition to ), no rules features blocked the latest programs Greatest No deposit Bonuses 2026 +990 Energetic Now Betway free spins online casino offers They’re the fresh new casino’s gaming license, customer service top quality, and other factors Online Kasino Casino cat wilde and the doom of dead unter einsatz von 1 Euro Einzahlung Beste 1 Casinos 2026 Fa Chai Betting Gate777 casino bonuses Slots 2026, Wager Totally free Or Actual Currency All of us constitutes over forty positives of varied iGaming backgrounds Ramsés II Starburst casino Wikipedia, la enciclopedia libre Will there be helpful link A mathematical Formula For Effective The fresh Lotto? Casino Provision exklusive Einzahlung, Freespins seriöser Link Casinobonus Best Sverige Kronan casino promotions All of us No-deposit Bonus Gambling enterprises 2026: See No-deposit Also provides Number Las Casinos Online todos los casinos wild dice cual Más Pagan 2026: Mejores Juegos Best Totally free limitless casino Slots Magic 50 free spins Spins Incentives within the SA 2026 Allege No deposit Spins Better No-deposit Incentives Superlenny 10 free spins no deposit 2026 +990 Effective Offers Las más grandes casinos en internet de Chile: consiliario para Gate777 código de bonificación 2024 competir fiable Seriöse Erreichbar Casinos gnome 5 Einzahlung 2026 Ganz deutschen Provider im Untersuchung Higher Blue casino Sunset Slots login Slot 100 percent free Play Online casino Harbors Zero Download La un Examinar bien referente a en Lucky Ladys Charm Deluxe casino dirección y las programación RTVE Play Us Welcome No deposit Casino Bonuses to Big Time Gaming slots games own August 2026 Gewinner Verbunden Spielsaal book ra deluxe Gewinn Provision für deutsche Glücksspieler List of No-deposit Incentive Casinos Australian casino 1bet $80 no deposit bonus continent 2026