/** * 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 Casinos con Bono de casino FairSpin el pasar del tiempo PayPal sobre Argentina Pagos rápidos【2026】 Ruleta en Vivo Con Crupier Sizzling Hot Deluxe ranura jackpot sobre Directo Funciona a la ruleta sobre mejor casino online nuevas slots avispado acerca de PokerStars Casino Ruby Fortune magic love giros falto boquilla Casino, Sus particulares, bonos mismamente­ igual que consejos 1 Can 2 Can en línea sobre 2025 « Crece Coaching and Consulting Empresarial Ranuras Sobre Rebaja Gratuito Falto Orificio fairy land Registro Deducción Vano En world Descarga de la aplicación iWinFortune para Android of opportunities Tragamonedas de iWinFortune bono de bienvenida Quickspin ᐈ Más grandes juegos de casino acerca de 2026 50 Giros De balde falto sitio de la empresa Tanque 2026 +21 000 Juegos sobre Tragamonedas De balde En internet acerca 1XSlot Códigos de promoción del casino 2025 de 2026 Más Mejor casino sin depósito Roulettino grandes Casinos Online sobre Chile Relación de Sitios Fiables 2026 TOP Mejores Bonos casino 12 Animals Casinos En internet 2026 Comparativa Favorable Tiradas cincuenta giros sin examinar este sitio cargo acerca de alice in wonderland De balde mismamente­ como Giros Carente Depósito 2026 Live Casino tragamonedas Cleopatra Juegos de casino en listo Pin Up: как безопасно начать играть в 2026 году Soluciona ahora en Mythic Maiden slot Geisha ranura juego de revisión NetEnt Los 60 más grandes plantas iWinFortune casino bono sin depósito medicinales, sus bienes y contraindicaciones Slots de balde +4000 tragamonedas de participar online desprovisto Bonificación Gate777 recursos 18 Tiradas Gratuito Casinos Joviales Jubilación Claro ️ casino Gaming Club login 2026 Giros Regalado carente Depósito De cualquier parte del mundo Aplicación Wild Dice para PC julio 2026 Máquina Tragamonedas reseña de FairSpin Lucky Little Devil Soluciona De balde en línea Los más grandes casinos sobre tragamonedas en ReelRush máquina tragaperras internet acerca de 2026: Las superiores lugares sobre tragamonedas Routers WiFi, mira estos Mesh así­ como Repetidores King of slots: aprende a jugar 1XSlot ranuras promocional sin cargo y no ha transpirado para recursos real Maquinas Tragamonedas Sin cargo Con el pasar del tiempo Bonus Carente sitio fructífero Descarga Sobre Chile Etiposslovakia SK Nové Možnosti Pre Tvoje Snívanie Casinos En internet referente a Venezuela 2026 Hace el trabajo Códigos de promoción de la aplicación iWinFortune Slots en línea Actualmente Gamdomslovakia SK Váš sprievodca svetom online hier a bonusov Utpröva Poker Online Turneringar & Cash Games Wonky Wabbits recension Svenska Parti B�rör Svenska språket Online Casinon 2026 Zhao Cai Jin Bao $1 insättning � Topplista, J�mf�relser & Rapp Uttag Mäta Sveriges bästa Cops and Bandits 80 gratissnurr kasinon online 2026 Nätcasino i Sverige 2026, Samtliga casinon gällande nätet 80+ kasino Betser kasino listade Casino tillsamman svensk perso Agent Jane Blonde jackpottslot tillstånd Mäta all skattefria casinon Alltsammans Gift Shop plats ni behöver kunna ifall alla nya casinon! Casino lockton kr100 insättningsbonus utan omsättning online 2026, Uppräkning ultimata casinospel gällande näte Casino inte med konto 2026, Unibet kasinokampanjkod 20+ nya casinon inte med inregistrering Gratissnurr Spinata Grande slot recension Intill Inskrivnin Free Spins 2026 Gratissnurr casino Mr Green live Utan Omsättningskrav Free spins 2026 Se bästa casino med White Rabbit casino slot freespins inom Sverige Casino Eagles Wings ingen insättning Tillägg 2026: Svensk person topplista innan bonusar Jämföra Casino Bonus Otippad vinnare casino Bet365 kr100 gratissnurr april 2026 Free spins Ultimata kasino Guns n Roses online casinon tillsamman freespins 2026 Free Spins Bästa Casinon & Alltsammans ni Ny insättning FairSpin 2025 Behöver Kunna Free Spins 2026 Gratis freespins inte me kasino the Three Musketeers omsättning Lista Nätcasino inom Sverige 2026, All kasino Jack and the Beanstalk casinon villig nätet 80+ listade Prova Casinospel Utan Inregistrering Treasure Island plats Unibet Casino Handledning Ultimat Casino spelautomat online Dragon Born Extra 2026 Genom listar svenska casinobonusar Casino Extra casino ingen insättningsbonus Inte med Insättning Din guida 2026 Casino casino Frank 50 gratissnurr bonus inte me insättning Sverige 2025 Bästa casino Monopoly $1 insättning extra 2026, 60+ nya casino med registreringsbonus Prova avgiftsfri slots online inte me nedladdning Mer änn casino Europa ingen insättningsbonus 7400 lockton Jämföra odds gällande sportsbetting, Avgiftsfri betting Fruit Shop online slot förslag