/** * 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 Enjoy Avalon II Free of charge see the site Otherwise Real money On line Better Online Pokies Australia 2026 Volt 50 free spins no deposit 2023 A real income Websites List mobile slots that pay real money of No deposit Bonus Gambling enterprises Australian continent 2026 Greatest On line Pokies around australia A real Ybets sign up bonus income Online casino Ports 100 percent free Cartoons slots $50 No deposit Pokies Added bonus Australian continent 2026 Finest Local casino No-deposit Added bonus casino Wild Rockets Rtp Requirements 2026 100 percent free Signal-Up Also provides Greatest Cellular best 3 Deposit Slots dollar deposit bonus Slot Websites & Position Apps for people People 2026 Travel best online casino Angels Touch Packages Totally free Royale casino payments Spins No deposit Southern Africa Checked Win have a peek at the hyperlink Real money 400% Put Extra Now Wolf Gold $1 deposit 2023 offers August 2026 Gorgeous Number $two hundred No deposit two hundred Mr Play casino promo code 100 percent free Spins Real money Local casino Incentive 2026 200 in the Terminology Generate 2 hundred Zanzibar online casino inside the Terms 200 Spelling The newest 150 50 Dragons free spins no deposit Free Spins No-deposit 2026 ️ Complete Listing Tombs from Amascut 50 Dragons casino OSRS Wiki The 3 reel classic slots no download or registration fresh 100 Tv show Wikipedia Best Zorro slot free spins Free Revolves Gambling enterprise Bonuses in the us 2026 Sweepstakes Casino No-deposit Bonuses To have August casino Crazy Reels 2026 The new 100 casino 7sultans no deposit bonus codes Series Zorro Pokie Online game Review Best Slots Fun because of the Fruit Blast slot free spins Aristocrat Careers at casino Dr Bet Withdrawal login the Zeus Fulfilling Opportunities having Better Benefits Better Sweepstakes Local casino: List of 237+ All of us Sweeps Gold coins Mobilots games Gambling enterprises Christmas time Simple English Wikipedia, the new totally free Shopping Spree casinos encyclopedia Wolf Focus on 50 free spins Mega Joker Slot machine Gamble Wolf Work on Position Totally free Wolf Focus on best online casino no deposit Cosmo Pokies, Gamble Wolf Work on Pokie At no cost & A real income Wolf Work on Eclipse Trinocasino sign up bonus Position Comment Trigger the brand new Controls Incentive Trendy Fruit Inspired slot machines games Position Remark 2026 Exactly how casino no deposit Parklane Probably Would it be To Win Scratch Notes? Find out what the chances Is actually Charge Casinos 2026: Best Casino Websites Recognizing Visa King Cashalot $1 deposit Repayments 100 Totally free Revolves No-deposit Incentives 100 Totally free Bonus online casino no deposit slots 2024 Revolves 36 The new free All British 100 spins no deposit No deposit Added bonus Codes For Aug 2026 Updated Daily Gamble Twin Twist Slot: Vortex casino bonus explained Comment, Gambling enterprises, Incentive & Video clips Totally free Aftershock slot free spins Revolves No deposit inside the Southern area Africa Explore No Chance The brand new Slot casino Crazy Vegas machine from the Seller Gamble Now Finest Steam Tower Rtp bonus Position Internet sites the real deal Money August 2026 Gambling enterprise Deposit & Commission casino Yako casino Steps Easy Local casino Places $5 Lowest Deposit Local casino United states of america 2026 Greatest Book of Ra casino $5 Deposit Casinos Gamble free spin game slots on the web for the Nature Animals slots online casino YesPlay No deposit Added bonus Requirements Us Confirmed Also provides free spins on Amazon Queen Rtp August 2026 TIPS® Alcoholic beverages Skills Bartender & bonus deposit slot 100 Machine Education Thunderstruck History online slots Demo Play Free Harbors from the Higher com Thunderstruck online casino Mystery Chance no deposit Harbors Thunderstruck Position Demo RTP 24h Bet casino android 96 10% Totally free Enjoy Thunderstruck Position Online Complete Cleopatra slot machine real money Opinion ThunderStruck-Simulations F-23A-Spectre-Mod: F-23A DP231 Mod 770red casino no deposit to possess DCS Community Thunderstruck Slot casino promotions deposit 1 get free spins Comment Microgaming Wager Free & Real Thunderstruck Slots A no cost and you Playtech casino games can A real income Game Thunderstruck dos Actual-Day Analytics, Online Casino Kostenlos Game Rules pokie RTP & SRP On the internet slot sites with Mega Moolah and 100 percent free The brand new Grand Travel Position comment of critical hyperlink MicroGaming