/** * 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 Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Juegos de Slots Regalado En internet Demo Slots Falto Tanque Queen Of Hearts Slot Machine Play Novomatic Slots for Free Comment Iron man step 3 Slot Rating Private Incentives Hellboy Position Opinion Play Free Trial 2026 Twin Spin Kostenlos Aufführen Jack goldbet ilovasini Oʻzbekistonda yuklab olish Hammer Slotlari va Bepul Aylanishlar Practical Gamble Remark va 100 foiz bepul Gamble'dan goldbet ilovasini android uchun yuklab olish Sensuous Safari namoyish sloti Видео слот Honey Bees Играјте онлајн видео Harbors 100% бесплатно 2025'in En İyi Ücretsiz Döndürme goldbet Türkiye bonus Kumarhaneleri: Daha Fazlasını Çekebileceğiniz Yer Litecoin Kumarhane goldbet uygulaması indirme Siteleri > LTC Kumarhane Bonuslarını İnceleyin Minimum Para Yatırma Yöntemiyle Kumarhane Rehberi: Temmuz 2026'da İnternetteki En Düşük Para Yatırma goldbet giriş apk indir Yöntemiyle Kumarhaneler Тренутна позиција игре Treasure Splash: Rainbows Мишљење Играјте тренутну позицију игре Jewel Splash: kodovi bonusa bez depozita vulkan vegas kazino Rainbows На вебу Онлајн игра Један за плаћање правим vulkan vegas Srbija новцем: дванаест апликација које раде 2026. године Демо формалне веб странице и IGT за vulkan vegas пријављивање на мобилни прави новац The Comparison of Casino Tournaments Одблокирано и 100% vulkan vegas bonus bez depozita бесплатно Играјте данас! Как трудится онлайн-казино вариант компании, как устроено и действует интернет-казино, антиклинорий Kazino online me rrotullime 100% falas, verde casino bonus kazino pa depozitim stimuj, fitim parash të vërteta në vitin 2026 Wolf Silver Slot Remark Rrotulloni Shkarkimi i aplikacionit ice casino për Çmimin Mega Jackpot Descoperă site-uri gratuite conj descărcarea de jocuri deasupra PC: 6 opțiuni conj tine Shikoni Rishikimin më të ice casino bonus bashkimi ri të Fitimeve nga Ounce Slot Online të krijuar nga Ash Playing, përveç kësaj, hasni kazino online dhe mund të fitoni rrotullime falas duke luajtur lojën e re për para të vërteta. Pozicioni i Wild Swarm Opinion RTP 96 38%, 50,000x Fitime dhe vulkan vegas kod promo për klientët ekzistues pa depozitim Publikim Ekstra Jogo Parimatch código de bônus de registro acostumado Položaj Chill Jewels na spletu Igrajte 100 odstotkov brezplačno Jogue 20,000+ Slots Online Acessível 2026 Sem Download Bônus de depósito PagBet Nem Cartório 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