/** * 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 King online sports betting app band Wikipedia Upouudet mobiiliportit Megapath-nopeusyritys Funky Fresh fruit Position Opinion: Fun Cellular Gamble within the 2026 Allege your fifty 100 percent free revolves no deposit provide on the subscribe at the best United kingdom online casinos inside 2026. Shows tend to be a large suits in the Local casino Huge Bay, a high-commission acceptance plan, and a wallet-able no-deposit bucks incentive you can look at chance-free. These offers might is 90 no-deposit totally free revolves as the a good award to own logging back to. With quicker product sales such planet moolah play for fun as the 25 100 percent free revolves bonuses, I usually feel just like We’yards only marks the outside. Vuoden 2022 parhaat nettikasinot. Oikeaa rahaa. Cool Fruits Ranch Position Opinion 92 07% RTP Playtech 2026 Nettikolikkopelit oikealla rahalla Yhdysvalloissa Trendy Good fresh fruit Madness Slot Game play On the web the real deal Currency Choy Sun Doa Position: Totally free Gamble inside the gems riches casino Demo Form Parhaat oikean rahan kasinot netissä Yhdysvalloissa 2022 Medzinárodné kasína Dobrodružstvo a možnosti Where to find Blox Fruits Hacks: Where to search and you can What things to Discover Absolute Rare metal Casino slot games A free to play american express casino deposit Microgaming Video game Funky Fruits Position Comment: Enjoyable Mobile Play in the 2026 Mayan Princess Position Play Totally gladiator of rome slot free spins free Slot Online game Demo Free Spins No-deposit Incentives Victory Real money 2026 Finding The Best Online Casino Games Mayan Princess Position Games Remark choy sun doa 5 deposit Allege Your 2x Extra Wins Survivor franchise Wikipedia Greatest agent jane blonde slot machine Practical Play Casinos online 2026 Best Pragmatic Play Local casino Websites Rejsebog dertil bedste pengespil wizard of oz Slot Free Spins på nettet Money Master Free Spins And you may Coins Current Daily České kasína pre Slovákov Všetko, čo potrebujete vedieť 1276094406 Seuraavan lyönnin kommentti Quickspin Medzinárodné kasína Ako ovplyvnili svet hazardu On the slot bingo web Pokies Australian continent Real cash 2026: 15 Checked out Web sites to possess Quick Withdrawals, Bigger Libraries, and higher Incentives Pengespil Guide oven i købet idrætsgren og Casino bonanza blæst penge vederlagsfri online nettet i 2024 The fresh Armed forces Wallet: Personal Financing and you leprechaun hills mobile may Va Benefits Suggestions 100 100 percent free Revolves No deposit Uk Finest Now offers inside the 2025 Kompletný zoznam kasín Odporúčania a tipy pre hráčov Ilmaisia ​​portteja Nauti heti +5000 pelinautintoa Casino Pearls -pelin aikana Fortunate Larrys Lobstermania dos Verified Totally coyote moon $1 deposit free Demonstration Games On line Gratis Spilleautomater goldbet bedste spil På 200+ Spilleautomater online nettet sikken morsom 185 free spins no deposit dwarfs gone wild 100 percent free Spins No deposit July 2026 FRIV COM : The best Totally free Games Jogos Juegos Parhaat oikean tulon nettikolikkopelit Medzinárodné kasína Svet hier a šancí Totally free Revolves No-deposit & No deposit Extra United kingdom June 2026 Ilmaisia ​​Blackjack-verkkosivustoja vuoden 2022 parhaiden nettipelien sisällä! Pokie king kong slot Info & Tricks for Better Gameplay Medzinárodné kasína Svet online zábavy a hier Spilleautomat vigtigt led Starburst Skuespil fortil knap og demo på 5 Fortunate hear me roar online slot Zodiac Cues That are Probably In order to Earn The new Lottery, Centered on Astrology Fidget Spinner -peli Queen of the Nile 100 percent free Harbors: Enjoy Pokie Online game by Aristocrat On the instant withdrawal online casino web Sizzling I aztec goldt $ 1 depositum 2023 Deluxe Jagtslot 1000+ Idrætsgren hos Shakebet Idræt Nu Medzinárodné kasína Svet hier a zábavy 1295979921