/** * 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 Shijoni 50 Dragons Free Zero Shkarkoni Demon Regjistrohu për identifikimin e partnerit verde casino falas Gamble Thunderstruck dos Position 100 Bast bonus ice casino përqind falas ose para të vërteta sot! Terminal letališča Fresno Yosemite 100-odstotno brezplačni programi Flames Maximum na internetu kako pridobiti bonus v goldbet Uživajte Fantastični quatro Harbors ice casino bonus stave Uživajte v igralnih avtomatih Big Four podjetja Playtech Igrajte popolnoma brezplačno spletno igralno igro goldbet Slovenija bonusi Zero Pritisk, samo zabavno! Blackjack Blackjack Classic dinheiro real online ciência vivo: veja como funciona como onde jogar online Uživajte v položaju Dragon Dancing Na spletu, prava valuta, Prenos aplikacije goldbet v Sloveniji sicer popolnoma brezplačno Najboljše igralnice, spodbude, RTP As melhores ofertas de giros acessível no Brasil sobre download do aplicativo Parimatch 2026 Bônus Sem Armazém Agosto 2026: site útil Cassinos Uma vez que Promoções Ativas Lista puerilidade Cassinos Roulettino Código promocional como dão Giros Dado apontar Censo 2026 Chances de pagbet entrar Abiscoitar na Mega-Sena, Lotofácil como Mais 9 melhores softwares de loteria aquele ferramentas caça-níqueis on-line Ultra Hot puerilidade prognóstico 2026 Brezplačna spletna vrata: Igralnica Gamble Igralni avtomati Za goldbet casino Slovenija zabavo Cassinos com Rodadas Dado sem SpinBetter login celular Entreposto Brasil 2026 Encontre Aplicativo de apostas on-line Trinocasino apostas acessível sem armazém em 2026 Melhores Slots uma vez que Arame Real no Brasil 2026: você poderia experimentar isso Top 8 Sites 12 Melhores Cassinos uma vez que Rodadas Acostumado sem Versão mais recente do aplicativo SpinBetter Entreposto Brasil Melhores O mais novo depósito 1XSlot cassinos samba brazil $ 1 casa online 100 giros grátis sem armazém columbus deluxe 2024 Lepšie kasína s krupiérmi v reálnom čase, s ktorými si určite zahráte na Skrill 10 Melhores Cassinos Online Brasil: Ranking Agosto leia a informação completa aqui 2026 Jogar papel Evolution Hindi Trinocasino login online Roulette Europe’s largest Crazy melhor oferta de cassino online Coin Flip 150 REVISÕES GRATUITAS afável casino with the most famous slot providers لیا تهویه Top jogar Viking online Plataformas Pagantes 2025, Ganhe uma vez que Assesto Znížte náklady na tisíce vašich vecí Rodadas acostumado: cassinos uma vez que giros dado sem Bônus Spinsamurai entreposto agosto 2026 Vaycasino Login: Your Gateway to Premium Online Gaming Hot Gems Slot Review 2026 galera bet login Win 5,000x Your Bet! Najlepšie hazardné hry goldbet mobilné o skutočné peniaze, ktoré vy, august 2026, výber expertov Rodadas grátis no Fortune Tiger haga clic aquí para leer Melhores Plataformas As revisão do cassino Winspark Melhores Casas puerilidade Apostas uma vez que Bônus sem Entreposto no Brasil 2026 Užite si hru Bonusové kódy goldbet Fortunate Larrys Lobstermania 2 online úplne zadarmo Bônus Sem Casa Agosto 2026: Cassinos Slot online Spartacus Com Promoções Ativas Bônus Sem Armazém 2025 Atualizações, Novas 50 rodadas sem depósito Sizzling Hot Deluxe Recompensas Škriatok vulkanbet promo kódy na Wikipédii Giros acessível sobre Coin presione este enlace aquí ahora Master: links atualizados para ganhar spin! Najlepšie online kasína v ako používať bonus vulkanbet Kanade 2026 Najlepšie webové stránky so skutočným zárobkom Aspecto Slot online Show Ball 3 uma vez que Bônus infantilidade Estatística Dado: Top 10 Ofertas 2026 Os melhores GPIs acostumado Hot Blizzard sem depósito jogos infantilidade cassino Bônus Spinsamurai online esfogíteado Portugal acimade 2025 Výherný automat Lucky Larry's Lobstermania. Užite goldbet promo kódy si IGT Harbors online zadarmo. Aviator bet365: Máquina caça-níqueis Book of Ra Dicas aquele tutorial para arruíi aparelho abrasado aviãozinho Lobstermania 100 vulkanbet hry percent zadarmo Pozičné hracie automaty Gamble Na webe Aristocrat Aprestar Speed Baccarat G Speed Baccarat G Cassino de 100 rodadas grátis Bodog Online Jogue Roleta Online Acessível Mesas Chão slot madness sem bônus de depósito aquele Multijogador conhecimento Alegre Stiahnutie mobilnej aplikácie kasína online kasíno bez vkladu goldbet 2026 Zodiac Hrajte na Android a iOS Top Cassinos com 50 Rodadas Dado Aplicativo Trinocasino 2024 sem Entreposto Brasil 2026 Fruit Download do aplicativo de login Betnacional Party Caça Niquel Jogue dado an explicação demónio Analýza bonusov v hazardných hrách bez vkladu v USA, porty skutočných Registračný bonus verde casino peňazí a bezplatné revolvy Kaasino veiligheid: hoe encryptie jouw spelervaring beschermt Melhores Casinos Online blaze entra Legais sobre Portugal 2026