/** * 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 Middle Court Apricot leprechaun goes to hell online casino Investment Microgaming Trial and you will Slot Review Center Judge Position Game Demo deuces wild 100 hand play online Play and Totally free Spins Most recent battle royal slot machine World and National Reports and Statements Suggestions on exactly how to casinos4u canada Conquer Thunderstruck Position Tips and tricks Our house cobber casino promo from Fun 856 833-1199 Barrington, Nj Top Us Online casinos for real Currency Gaming online casino casino roulette in the 2026 25 Choco Reels Online -Slot Maklercourtage exklusive Einzahlung Kasino ️ Brd August 2026 A knowledgeable Casinos ghosts night hd slot on the internet for real Money in the usa to have 2026 A complete Listing of Sweepstakes Casinos cashosaurus slot machine In america The real deal Money Better Real money Web based jack on hold $1 deposit casinos Top 10 to own August 2026 Finest step 1 Minimal Deposit Gambling online casino real money caribbean holdem establishment Sites 2026: Finest Picks Top 25 Casino Provision hitnspin Casino Promo ohne Einzahlung 2026 inside Teutonia Current Globe and Federal the great queen bee slot machine Development and Statements USATODAY com Greatest A real income Web based slot la playa casinos For the Usa 2026 Internet casino Internet sites the real deal Currency Gaming Ranked immortal romance $1 deposit August 2026 Kasino Prämie bloß Einzahlung Zusammenfassung: Sämtliche Willkommensbonus Angebote je Erreichbar Casinos exklusive Einzahlung im Slot garage August 2026 fix durchsteigen Best casino battle royal Real money Casinos on the internet in the August 2026 On line Pokies 100 percent free Pokies during the magic love slot real money 24Spins com Web based casinos 2026 old fisherman slot Real cash Web based casinos Freispiele ohne Inferno Star Spielautomaten echtes Geld Einzahlung 2026 100% Für nüsse & Sofortig AUD and karaoke party slot sites Crypto Gambling enterprises Hot-shot Gambling establishment Ports: Ideas on machance casino bonus how to Play and have Incentives Risk High-voltage Position Wager 100 percent free Or A real jacks or better hd online slot income Best Mobile Gambling enterprises 2026 Enjoy Casino from bonus slot jackpot jester 200000 your Cellular phone Anyplace 100 percent free Revolves Gambling enterprise Now casinos4u New Zealand bonus offers for us Players Best 30 free spins baron samedi Us Mobile Casinos Available online Within the 2026 100 Freispiele bloß Einzahlung Aktuelle Liste Gebührenfrei 100 Free Spins lost island Online -Slot Land der dichter und denker 2026 Finest Local casino Software 2026 Betting Applications The real deal slot asgard Money Sony casino app Alpha cams Greatest Online casinos Us 2026: Real money Legal mystic dreams slot free spins Casino Websites Finest Cellular Gambling enterprises 2026 Greatest Real cash Gambling establishment play bonus poker 5 hand online Applications Kreative 150 Chancen Valley of the Gods Einladungen zum 70 Geburtstag Better Casinos on the internet For real Currency August kitty cash $1 deposit 2026 Da Vinci Diamonds Position Video slots Igt game: Play And you will Earn A real income! Greatest Usa Online casinos August 2026: Better All of us Gambling enterprises igt gaming casino games Rated Leading Gambling establishment Gambling Book to possess 30+ forbidden throne slot machine Ages Ports Eden & Dining table Video game at the Hot oscar spin promo codes shot! Finest Real magic lamp hd online slot money Online casinos in america August 2026 An informed Web based casinos around australia to possess 2025, Rated $1 deposit casinos 2026 because of the Australian Bettors Better Web based casinos around finn and the swirly spin slot machine australia 2026 40 Freispiele bloß Einzahlung within Stampede $ 1 Kaution Angeschlossen Casinos August 2026 Hot shot Slot Remark no deposit casino free chips Bally RTP 96% Finest free spins vegas party no deposit casinos on the internet around australia for 2025 List of the major real cash local casino other sites to possess Aussies 60 Freispiele abzüglich lovely mermaid Slot Einzahlung die besten Spielbank Boni 2026 Center Courtroom Demo Gamble free spins no deposit foxin wins football fever Free Slot Online game Australian best double double bonus poker 1 hand habanero online Internet casino: Video game and Incentives Finest Casinos on the internet in australia 50 free spins on lucky zodiac no deposit Better Gambling establishment Web sites To possess 2026 Better Casino Software United kingdom in the 2026 Greatest Mobile genies touch casino Casinos Rated Freispiele bloß Einzahlung 2026 Nachfolgende besten Free Spins diese Seite untersuchen Angebote 10 Better Casinos on the internet free online slots no download for real Money United states within the 2026