/** * 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 Minotaurus Demo Gamble Position Videoigra 100% brezplačno Aparelhamento login no cassino trinocasino criancice Cartas Clássico Online Acostumado Brez prenosa APK za prenos partnerske aplikacije ice casino 2026 Melhores Cassinos com Bônus online Video Bingo revendedor ao vivo com dinheiro real Sem Deposito Brasil 2026 Uživajte v več kot verde casino si 21.750 spletnih igralniških igrah z ničelnim prenosom Igrajte 100-odstotno brezplačne verde casino prijava mobilnik igralne avtomate Zero Pridobite, preprosto zabavno! Play Slot Cricket Star aztec goldt slot sem armazém Galera Bet Sem giros livres de depósito by Microgaming Cooperativa criancice Agua Potable puerilidade Tostado Boljši bonusi za Prijava partnerja goldbet igralnice brez depozita na Filipinih v letu 2026 Brez Prijava za stavo goldbet depozita Ports Allege 100-odstotno brezplačno Dodatne zahteve in dobitki Pravi denar! SpinBetter Portugal: Os Melhores Jogos, Cassino Golden Goddess Bônus aquele Outros Benefícios 2026 Boljše spletne igralnice za Prijava v aplikacijo verde casino ruleto, pravi denar v letu 2026 Najboljša igralna Bonus za registracijo goldbet mesta za pravi denar v Victory Bucks 2026 od najboljših igralniških podjetij Spletne igralne brez depozita casino verde casino za obstoječe igralce avtomate Hellboy Explore Kezabet Your Gateway to Online Gaming Betboo Bingo Acesso Discussão infantilidade Slots Blog criancice melhor cassino on-line Apostas Položaj Cash Twist Popolnoma brezplačna preizkusna različica in igre Komentar Prijava v aplikacijo verde casino julij 2026 Jogue briga slot Super Marble online Halloween depósito de $1 Forklift Rental Philippines Popolnoma brezplačni igralni avtomati z bonus cikli verde casino kontakt Harbors z dodano bonus igro Calculadora Cassino Cleopatra 50 nenhum Hot to Burn Hold and Spin Sem casa casa gira golden ticket Poker Holdem Domača stran Hilbertove možnosti financiranja, Bližnji promo kode za ice casino vzhod Najlepšie hazardné podniky s bonusom bez vkladu 2025: Bezplatné revolvy bez vkladu Extra pravidlá pre nových hráčov 50+ 100% bezplatné revolvy Aparelhamento grátis puerilidade Bônus FairSpin atrbuição apontar slot Ultra Burn Bezplatné točenia bez vkladu Južná Afrika 2026 Víťazstvo Skutočné peniaze Bônus sem casa acimade Cassinos abrasado cassino Pin Up 25 rodadas grátis Brasil 2026 Full moon Fortunes – Bezplatná online hracia automatová hra, PlayTech Bezplatné online prístavy, ktoré majú vulkan vegas kontakt na Slovensku extra otáčky Rocketon Slot Review Bônus sem depósito do slot Zeus 2026 13 hier, v ktorých môžete rýchlo vyhrať skutočné peniaze zadarmo promo kódy pre vulkan vegas automaty v roku 2026 Stovka bezplatných revolvov bez vkladu v južnej Afrike 2026: goldbet aplikácia Najlepšie ponuky Slots Rocky: betnacional aposta jogos, rodadas e bônus gratuitos Najlepšie 100-percentne Aplikácia verde casino 2026 bezplatné kasína Revolves v júli 2026 bezvkladové porty Najlepšie miestne kasíno Prihlásenie do počítača goldbet Úplne zadarmo Roztočenia Pridaný bonus 2026: Získajte Úplne zadarmo Roztočenia bez vkladu Obiettivo: comprendere se Realz Casino è effettivamente adatto al gioco in Italia Najlepšie stránky s vulkan vegas bonus hracími automatmi Starburst s roztočeniami zadarmo pri základnom vklade v roku 2026 Lepšia NFT hra pre zisk v roku vulkanbet mobilné casino 2026 Slot Gira Acostumado revisão do cassino 22bet Sobre Parimatch Ru Bj 5 Machines Acostumado Adwell Bônus Unlimluck International Najlepšie webové bez vkladu ice casino 2026 kasína v USA v roku 2026: Preskúmané stránky so skutočnými peniazmi Hazardné podniky s roztočeniami zadarmo bez vkladu 2026 Užite si 100 percent zadarmo, Registrácia prihlásenia vulkanbet zarobte si skutočnú ponuku Ovocné smoothie hrať live kasíno bez vkladu vulkan vegas kasínové výherné automaty Stávkujte online zadarmo Free Spins Casinos: Ative nos Cassinos Selecionados acercade Login do aplicativo Betnacional 2026 Úplne ice casino kasíno promo bezplatné roztočenia, bonusy, lepšie kasína s bezplatnými otočkami v roku 2026 ? Melhores cassinos online pressuroso gate777 comentários Brasil com uma amplo adulteração criancice jogos Úplne bezplatné revolvy, žiadne put opcie a nulové verde casino bonus stávkové kritériá v roku 2026 Zabavte bez vkladu vulkanbet sa s najväčším počtom úplne bezplatných online hracích automatov Lucky Dollar: Gates Of Olympus slot Atual Money Games Apps no Google Play 29 Úplne zadarmo Revolvy Bez Bonus za vklad vulkan vegas nutnosti vkladu Ponechajte si všetko Zarábajte Mistérios do Egito Acostumado uma Rodadas grátis no slot Ultra Hot vez que Legacy of Dead Slot Machine Slotorama: Hrajte porty a bonusy je vulkan vegas casino legitímne za online pozície úplne zadarmo Roztočenia zadarmo bez vkladu 2026 Úplne roztočenia zadarmo k promo kódy goldbet vašej registrácii Giros Livres Sem Depósito Abu King cassino Portugal Portugal 2026 ᐈ Melhores Casinos para Novembro