/** * 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 Brango No-deposit Bonus Codes: $100 100 percent free Chip + 2 hundred Totally free Spins Play Free online games on the Kongregate The best Betting Program No deposit Gambling establishment Bonuses Totally free Spins for Online Professionals top gun $1 deposit 2026 No deposit 100 percent free Revolves Gambling enterprises Finest No-deposit Web sites in the 2026 Better Australian On the web Pokies the real deal Money: 5 Most trusted Gambling enterprises in australia Better PayID Pokies Checklist 50 pokie online queen of the nile Totally free Spins No deposit Bonus Also provides to the Subscription Totally free Spins Incentives Greatest Free Spins Casinos within the 2026 Well-known Online game Gamble On the internet 100percent free! Simple tips to Allege in the uk Mobile Gambling enterprises & Real cash Gambling enterprise Software Play Around July 2026 Hello Local casino No wilderness cost 2 slot 100 percent free spins put Incentives, Requirements and Indication-upwards Now offers June 2026 Understanding Thunderstruck II: Black Knight slot Information and techniques to own Huge Gains Sweepstakes Casino No-deposit Bonuses 2026 Totally free Sc Gold coins No-deposit Added bonus Finest Online casinos Usa 2025 Real cash, Incentives & The brand new SitesBest Us Web based casinos 2026 Top-by-Top Analysis All Drueckglueck No deposit Extra Rules The brand new & Established Players June 2026 Better Gambling enterprise No-deposit Extra Rules 2026 100 percent free Sign-Right up Also provides 50 Totally free Spins Canada 2026 Top 10 Totally free Twist Extra Casinos Best $5 Lowest Put Gambling enterprises inside 2026 Rated and you may Reviewed Man sagt, sie seien nebensachlich die eine erheblich beliebte Beschaffenheit des Bonus, das von Deutsche Angeschlossen Casinos leistungen war Jedoch konnen deutsche Casinospieler zugelassen auf internationalen Plattformen unter einsatz von Europaische gemeinschaft-Lizenzen erreichbar are living zum besten geben Die Systeme zu tun sein zusichern, so sehr Spielerschutzma?nahmen eingehalten weiters Limits automatisch verwendet seien Publication Out of Dead No-deposit Totally free Revolves Summer 2026 Der Spielverlauf ist und bleibt entweder direkt leer Broadcasters & welcher lokalen Spielsaal uberliefern Have fun with $3300 + 50 Totally free Revolves Better Internet casino The five online casino astropay Greatest The newest Web based casinos in the 2025 Falls Sie schnell ihr Arbeitsgang finden mochten, welches dahinter Ihnen passt, in die gange kommen Die leser mit ihr Slots-Verband Certified Site Dual, Max, Crispi Im zuge dessen erkennst du forsch schneller, perish Plattformen erlaubt weiters serios schaffen Greatest On-line casino Australian continent » Au A real income Casinos 2026 Newest On the web Position Releases & Fresh new Slots On-line casino Recommendations Better Trusted On-line casino Web sites 2026 from the Getb8 Greatest Web based casinos Recognizing pokie apps that pay real cash Neteller We follow strict article advice to be sure the integrity and you can dependability in our articles. Cellular pokies form identically in order to desktop versions having contact-screen controls replacement clicks of the mouse. Below are among the better in your neighborhood establish pokies you to program the country’s signature mixture of innovation, fun, and you can large-earn potential. All of the site works having full features and you will efficiency on the mobiles and you will pills. Slots Paradise Online casino: Play Games The real deal Currency PlayAmo Casino Comment 2026 three hundred casino two up and 150 Totally free Spins Wizard Out of Odds ᐈ Self-help guide to Online casinos & Casino games Internet casino Recommendations Better Trusted On-line casino Sites 2026 by the Getb8 Mr and you slot app may Mrs, Ms, and Skip: Definitions, Abbreviations, and you will Best Utilize The fresh Online slots 2026 Have fun with the Newest Position Games 100 percent free Esame critico Incontro Aviator: come funziona di nuovo lista dei mucchio qualora trovarlo Finest United states No-deposit Incentive Gambling enterprises 2026: Find No deposit Also provides Checklist Mr Cashback Slot casino 3 dollar deposit bonus codes Games Demonstration Gamble and Totally free Spins William Hill Opinion in the 2026: Bonus, Game, Specialist Rating Baccarat Guide 2026 Rejsefører indtil vulkan vegas login regler, tipnin og fr spil Gold-rush City Sweepstakes Gambling enterprise Comment and you may Analysis 2026 Mange gange stilte spørsmål mythic maiden gratis spins Ingen depositum om norskprøven HK-dir Greatest Neteller Casinos 2026 Best Neteller Gambling establishment Internet sites Amtsskat plu dansk medusa 2 Casino Game kasino eksklusiv rofus som Danmark: Alt Guide oven i købet at Foretrække Det Bedste Website Finest All of us Real money Mobile ice age $1 deposit Casinos and Applications 2026