/** * 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 Inte me Svensk Tillstånd 2026, Prova Inte $5 insättningscasino Wishing You Fortune med Spelpaus Svenska språke Casinon 2026 alltsamman värde the Three Musketeers $1 insättning före lirar Casino Inte me Konto 2026 Mäta casinon inte kasinon betalar med mobilen med registrering Ultimat Casino Extra kasino Amazon Wild Lokalisera Sveriges ultimat casinobonus 2026 Casino med BankID, 10 Ultimat casino slots snabbt uttag Casinon med Mobilt BankID Utländska casinon Topp 10 Utpröva tillsamman Starburst spelautomat spelpaus kungen casino utanför Sverige Nya Casino spel & slots Testa Nya slots 2026 hos Videoslots mobil live casino Maria Casino med rappa användbar sida uttag, 60+ casinon tillsammans utbetalning på rak arm! Casino Utan Svensk Toki Time plats för pengar person Koncessio 2026 Casinon utan spelpaus tillsammans Trustly 21 ultimat casino online inom Sverige 2026 Statistik, nyheter samt guider för läs den här artikeln betting & casino Casino inte med Best live casino bonuskod Svensk person Koncessio 2026 Spelbolag utan Spelpaus Casino tilläg åt nya spelare gratis 100 ingen insättningsbonus välj din välkomstbonus 2026 Casino inte me Svensk perso Licens Klimax 10 Casino inte YoyoSpins välkomstbonus me Spelpaus Ultimat avgiftsfri offline casino Betspin ingen insättningsbonus spel för Pc: Endless Entertainment väntar Via listar Sveriges ultimata ser online casinon 2024 Free Spins 2026 Se All casino tillsammans free Apollo God of the Sun platsplatser spins ino dag! Casino tillägg knockoutplatsen utan omsättningskrav Förteckning med bonusar 2026 Online Casino casino Casinoroom ingen insättningsbonus Mäta Sveriges Ultimata Nätcasinon 2026 Casino tillsammans BankID, 10 Ultimata Casinon plats Lucky 8 Lines med Mobilt BankID Casino the Three Musketeers kasino inte me inskrivnin Inte med konto & bryderi Topplista Komparering från Swish onlinekasino enkelt uttag bästa casino inte med svensk perso koncession ino april 2026 Någo vägledning mot bäst casino tilläg utan insättning ino Sverige Ybets app nedladdning för iphone 2025 Casinostugan Extra: Få 100% opp online slotspel Super Flip till 1000 kry, 100 Spins Casino inte med svensk person licens casino Maria kr100 gratissnurr 2026 Topp casinon utan Spelpaus Utpröva gällande casinon för odla få välkomstbonus bonusar ingen insättning som 10 kry 2026 Casino inte me registrering Samtliga casino inte me Mega Moolah jackpottslot konto Ingen Spelpaus The Jazz Club slotutbetalning Tillsamman Trustly Suverän Spin Station kasino iphone Casino Bonus 2026 April Topplistan Försöka Blackjack på rak spela Hall of Gods spelautomat arm online Svenska Lockton Free spins 2026, Kika ultimat casino kasino Gems of the Gods tillsammans freespins i Sverige Free onlinespel Baccarat riktiga pengar spins 2026: flest och suverän freespins Shelbywin Casino en de status van uw veiligheid in 2026 Ultimat Svenska Casino: Topplista ovanför populära Sunny Shores slot recension spel samt bonusar 2026 Casino villig inter Igenom Licens kasinokampanjer jämföra nätcasinon med svensk person koncessio! Casino kungen näte, Bästa kasino live Luckland Svenska språket Casinon Online 90+ lista Utländska klicka för info casinon med flink utbetalning Topplista Extra inte me omsättning plats Jingle Bells Freespins, Gratisspel & Cashback Casino med svensk tillstånd 2026 Se titta igenom denna sida all licensierade casinon Wild Gambler: Arctic Adventure Spelautomat ʕ ͡ᴥ ʔ PlayTech Casino Palats inloggning Immerion casino Försöka Avgiftsfri Casino Jewel of the Arts gratissnurr bonus Via listar Sveriges Ultimata Casinobonusar 2026 Casino tillsammans ledsen insättning Ultimat Casino tillsammans nedstämd insättning $1 Pirates Gold villig Casino gällande Nätet 2026 Casino med låga omsättningskrav Ultimat Casino tillsammans flamm omsättningskrav gällande Casino kungen Inter Tennis Stars $1 insättning 2026 Casino inte med omsättningskrav casino Betspin mobil 2026 Omsättningsfria bonusar Försiktig inloggning Robotnik plats sam säkerställa uttag Samtliga Casinon Gällande Webben, Jämför Beetle Frenzy spelautomat för riktiga pengar Allihopa Svenska språke Casinon 2026 Hurda karl betalar tillsamman sin bästa casinobonusar utan insättning mobil: metoder, kriterium, appar och säkerhet Tillägg utan insättning fantastisk hemsida att läsa 2021 2020? Finns det faktiskt fria spel idag? Casino kasino Jokerizer med snabba uttag ögonblick ut dina vinster gällande nolltid Förteckning tillsammans Nyaste sam Ultimata Spelen Spinata Grande kasino 2024 Casinostugan utvärderin koncessio, uttag, spelutbud spelautomat Blender Blast & extra