/** * 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 Slovenské online kasína v roku 2026 Budúcnosť hazardných hier na Slovensku Részletes útmutató a legjobb teniszfogáshoz Slovenské online kasína Vaša cesta k zábave a výhram -2135842890 Slovenské online kasína v roku 2026 Novinky a trendy Common Online game Play On line at sugar parade jackpot slot no cost! Slovenské Online Kasína Prehľad a Najlepšie Možnosti Hrania Slovenské online kasína Svet zábavy na dosah ruky Totdat 500 voor spins bij Bet365 welkomstbonus Kloosterzuster Deposit Premie noodzakelijk? Gij uitgelezene bonussen buitenshuis stortin van June 2026 Marathonbet kommentár: Melyik fogadóiroda a legfrissebb bázis, ami segíthet a múltban? King of fruit party 150 free spins the Nile 2 Ports Comment 2026 Earn up to 3,a hundred Gold coins 50 Free Spins Kloosterzuster Deposito 2026 Het Uitgelezene 50 Free Spins Casino’s Slovenské online kasína Urobte si radosť s najlepšími hrami Online kasíno s minimálnym vkladom Beste Mobiele Casino’s afwisselend Holland 2026: Eersterangs Casino Apps Online kasíno s minimálnym vkladom Prehľad a výhody A legjobb online kaszinó bónuszok 2025-ben: 10+ kaszinó kuponkód Have fun with the Preferred & dragons reels hd slot machine Enjoyable Game On the internet! Twenty20 krikett jogszabályok, háttér, Globe bögre, 2026, eredmények, mérkőzések, kiemelt események, ismertetők, menetrend és problémák Exploring live betting options at MarvelBet: play your favorite sports in real-time Online kasíno nové Odhaľte vzrušujúci svet virtuálnych hazardných hier Slovenské online kasína Objavte svet zábavy a výhier Sporting Index Feliratkozás Kínálat: Fogadjon 10 fontot, 60 fontot az 100percent-ban ingyenes fogadásokon belül. Slovenské Online Kasína Všetko, čo potrebujete vedieť -2133401015 Finest Slots playing Online the real deal Currency: Top Slot Video game July their site 2026 A legjobb CSGO játékos weboldalak az Egyesült Államokban 2026-ban A legjobb CS2 Peels fogadások Slovenské online kasína Prehľad, výhody a obľúbené hry Online Kasino Slovenski Vstúpte do Sveta Zábavy a Výhier thirty-five casino gold vein Unbelievable The brand new Ages Eve Team Information Razor Shark Gratis Zum Freaky Fruits Kostenlose Spins Keine nv casino Einzahlung Besten Geben Bloß Eintragung Regisztráció Ausztrália kedvenc online fogadási weboldalai Jurassic Park immortal romance slot machine Wikipedia Pass on Moneyline Calculator To possess On line Wagering and Gambling Slovenské online kasína Svet zábavy a šancí na výhru Slovenské online kasína v roku 2026 Trendy a možnosti Traktandum Free Spins Kasino nv casino Bonuses For 2024 Dream Vs Lynx Wnba Anticipate, Opportunity And you can Trick Professionals To own Wednesday, July 17 Choice Atla Slovenské Online Kasína Tvoje Favority na Dosah Slovenské online kasína Všetko, čo potrebujete vedieť -2133859000 Jungle Jim lucky zodiac 5 deposit El Dorado Casino Games Opinion BetMGM Arizona Sports betting Enjoy Forest Jim El Dorado because of the Microgaming free of charge to the Local lucky 88 $1 deposit casino Pearls 20 Free Spins No Frankierung Prämie nv casino ️ Spielsaal 20 Free Spins Deals Slovenské online kasína Všetko, čo potrebujete vedieť 1236579437 Slovenské Online Kasína Váš Sprievodca Svetom Hrania Online Casino Sites That Approve Bitcoin Deposits: A Comprehensive Guide Online Kasíno Slovenskí Kde Hrať a Na Čo Si Dávať Pozor Would it be Permissible To experience Ludo? Online Kasíno Slovenský Všetko, čo potrebujete vedieť -2140173312