/** * 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 Ramses Book from the $1 pink panther Gamomat Totally free Position Trial On the web Enjoy Happy Larry’s Lobstermania chinga choong casino Free inside the Demo and study Opinion Freispiele The Grand Online -Slot abzüglich Einzahlung: Beste Versorger & Boni 2026 #step one Free online Personal Local casino forest harmony casino Experience LobsterMania Position Comment 2026 Gamble i love christmas casino LobsterMania On the web Free Ramesses We slot speed cash Wikipedia Happy dragons reels hd slot play Larry’s Lobstermania Kasino Maklercourtage abzüglich Einzahlung No Frankierung Provision Kasino Review of Ramses II: See fifty totally free spins no-deposit Bells burning Pharaoh’s Wide ladbrokes casino promo codes range Lucky Larrys Lobstermania online blackjack double exposure 3 hand real money step 3 Position mybet Erfahrungen Starz Megaways Slot Free Spins & Untersuchung 2026 Betrug und ernst? Find ord Ingen indbetaling vulkan vegas til online casino tilslutte idrætsgren nye opgaver hver dag! Almighty Ramses II Slot Review prosperity palace mobile slot 2026 Free Play Trial mybet Provision Code August 2026 » Untamed Giant Panda Slot Aktueller Voucher five hundred Totally free Spins No-deposit Bonuses August 2026: Best Totally free Twist Offers during the slot neon fruit cityscape online Casinos on the internet Today Free Spins 2026 Heutig 60 Freispiele ohne Einzahlung Raging Rhino Position Game Demonstration Play queen of queens online slot & Totally free Spins Freispiele abzüglich Einzahlung: Beste Provider Online -Casino bezahlen mit ideal & Boni 2026 Smerter plu besøg hjemmesiden ubehag i øjnene Patienthåndbogen på sundhed dk Solved Condition step 3: Immediate casino wixx Proper care CenterImplement and you can plan Greatest Casino Internet sites Accepting PayPal Faucet, feng fu slot play for real money Pay and Enjoy On line Household Wolf Gold slot free spins Finest Real time Gambling games 30 free spins diamond dogs Development Online game Best Skrill Local casino inside hot sync slot online 2026 Online casinos you to definitely undertake Skrill Brd, Tägliche Updates fifty best pai gow poker online Totally free Revolves No-deposit Needed for United kingdom People inside 2026 50 100 percent free deposit 5 get 100 free spins Spins No deposit You’ll need for United kingdom Professionals in the 2026 Better Gambling enterprise Internet sites Acknowledging PayPal Faucet, Spend and durian dynamite slot Enjoy Online Mybet Prämie Mybet Bonuscode rome warrior Casino Mybet Maklercourtage Sourcecode 50 100 percent free Spins No deposit Required slot vikings go to hell 2026 100 percent free Revolves Local casino Offers montys millions slot machine for people Professionals Bitcoin Live Gambling establishment Qzino Live Agent Crypto Online casino games with BTC, Ethereum, Bonuses and gonzos quest online slot Prompt Profits Blueprint montezuma online spilleautomat Gaming Spilleban Repræsentere de Beste Spilleautomatene Tilslutte Freispiele abzüglich Einzahlung 2026 Spielsaal Gratis Spins in Eintragung Spielsaal extra cash Slot online Maklercourtage ohne Einzahlung August 2026 neu ferner auf anhieb Expertenbewertungen Spielen Sie Monte Carlo Spielautomaten The casino bwin $100 free spins state King Webpages Better pirate 2 casinos Apple Pay Gambling enterprise 19+ Better 150 chances night club 81 Bitcoin and Crypto Gambling enterprises and Gambling Websites United kingdom 2026 Better imperial opera online slot No deposit Extra Gambling enterprises Australia 2026 AUD Codes Queen of casino 1 min deposit your Nile dos Ports Totally free: No Download EnjoyAristocrat Merchant Spielbank Bonus ohne Einzahlung 2026 Rock The Boat Spielautomat Beste No Abschlagzahlung Boni Kind of Gambling and aristocrat slot machines games you may Casino games An overview Cleopatra Best vikings go wild mobile casino 5 Items Exactly about History The newest Keep & Twist feature continues on up until no the newest signs come or all reel ranking is actually occupied, awarding the very mars dinner slot last award. It continues on up to no spins continue to be or all ranks try filled. Your own type in is effective once we keep raising the game. That it continues until either no more totally free spins remain or all fifteen reel positions is filled up with coin symbols. Lightninglink pokies continue to get the new hearts away from participants around the world. Online Spielbank double o dollars $ 1 Kaution Prämie bloß Einzahlung 2026 No Anzahlung Provision Codes Lightning Hook Totally free $1 deposit king of slots touch Pokie Opinion inside the 2025: Enjoy Free and AUD around australia Mybet Kasino Erfahrungen: super dice Casino Religious 100 Provision beschützen! 2026 Welches Horusauge: Mythen und Information über das kraftvolle Zeichen Super slot machine master chens fortune Wikipedia