/** * 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 What to expect on your first visit to a casino What makes a casino experience unforgettable? Ideal Sweepstakes Gambling enterprises 2026 Positions Ideal This new Sweepstake Gambling enterprises Analyzed To own August 2026 Greatest Sweepstakes Casinos You 2026: Better Sweeps Bucks Sites Most useful Web based casinos Better Local casino Websites in 2026 Top You On the web Roulette 2026 Enjoy Roulette On line inside Usa Top On the web Roulette Casinos from the U S. Get, 2026: Top Roulette Sites Reviewed Most readily useful No deposit Incentives in the us to possess 2026 No deposit Added bonus Codes Us Confirmed Now offers August 2026 Finest Real cash Online casinos Top ten Into the August 2026 Safest Casinos on the internet to possess United states of america Participants 2026 Greatest On-line casino Sites for us People 2026 Reviews Judge On line Baccarat 2026: Finest Real cash Web sites, Software & Where you should Gamble Better Online casinos for 2026 Contrast Uk Gambling enterprise Web sites & Bonuses Most useful On the web Baccarat Local casino Sites 2026 Ranks Alive Agent Baccarat Listing of Top Alive Dealer Baccarat All of us On line Gambling enterprises Harmonious Costs Software UPI Casinos Over Record 2026 Top Gambling enterprises Instead of Gamstop in the 2025: Complete Guide for British Professionals The Web based casinos Instead of GamStop Uk for the 2025 Your favourite Online game + Real time Traders! Ideal Uk alive agent casinos 2025 Locations to gamble live gambling establishment video game The newest UK’s Top ten Online casinos inside 2026 Rated & Ranked Navigating the world of high-stakes gambling Albo sa jakies Bylo Szuflada Kasyno Blik Wybrane Za pośrednictwem Autorow Polskiekasynos? Zaloguj się i Zgarnij czterysta Pln Bonusu Uciechy kasynowe Nasz kraj 2026 TOP 18 kasyn internetowego Bezpłatne Gry hazardowe w naszym kraju Perfekcyjny Rozrywki Urządzenia darmowo Maszyny internetowego przy XON Bet: Automaty do uciechy w kasynie Najlepsze Kasyna do Uciechy w całej Automaty Online- Gatunki, wytyczne, bonusy Najlepsze Kasyna Internetowego w polsce 2026 Bezpłatne Automaty ️ Zagraj w całej Darmowe Automaty Sieciowy Automaty Internetowego Darmowo Darmowe Uciechy Sloty Ustawowe kasyna internetowego na terytorium polski przyczynki i regulacje Najkorzystniejsze Automaty Przez internet w polsce 2026 TOP 5 lokalnych kasyn sieciowy Najkorzystniejsze kasyno wideo 2026 na terytorium polski Ranking Najlepszych Kasyn Sieciowy Najistotniejsze Kasyno Sieciowy w polsce 2026 Kasyno internetowego 2025 zestawienia najkorzystniejszych salonów gier Lokalne Kasyna Internetowe Najlepsze Polskie Kasyna Online ᐈ Lipiec 2026 ᐈ Kasyno Analyzer Najpozytywniejsze kasyna online w polsce 2026 Zestawienia Kasyn 2026 Najkorzystniejsze Kasyna Online Nasze państwo 2026 Ranking Kasyn Najkorzystniejsze Legalne Kasyna Internetowego na terytorium polski 2026 Legalne Kasyna Internetowego na terytorium polski Wykaz 2026 Vavada Casino Przez internet ⭐️ Zaloguj się w całej Vavada Kasyno jak i również Odbierz Nadprogram dziesięciu najlepszych kasyn na terytorium polski Mostbet Casino PL⭐️Oficjalna portal w polsce⭐️2000zł 220 FS Legalne Kasyna Przez internet na terytorium polski 2026 Zestawienia