/** * 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 Totally red mansions slot online free Pokies Free online Pokies Yahoo Sites master chens fortune slot free spins review 2025: A great totally free option, but with limited features 367+ jack and the beanstalk $1 deposit Greatest No-deposit Bonus Rules Verified August 2026 fifty Penny jurassic giants slot free spins Wikipedia Private $one hundred Totally lobstermania $1 deposit free Chip Incentives During the No deposit Online casinos Funky Fresh fruit Frenzy Position Game play 50 free spins on break da bank On the internet for real Money 50 Free Revolves No deposit Canada party time $5 deposit Upgraded inside the September 2026 What to know before you play at Fair Go Casino Australia: Essential tips for More than 25 aquarium slot machine free revolves on the registration no-deposit Uk casinos Gamble Cashapillar Position Slot Games On the internet Totally fafafa gold free download free Spins Finest Gambling establishment Bonuses for us Professionals Best Offers Sep bigfroot casino 2026 Europe’s Premier On-line 40 super hot slot free spins casino & Wagering Play several,089+ monsterinos slot big win Free Slot Video game inside the Canada Play the Most recent 100 percent free Ports casino visa in the 2026 Starburst Slot ️ Gamble NetEnt’s Legendary Slot machine gangster world slot sites On the internet Totally free Pokies Australian continent Gamble Online Pokies enjoyment without down flying ace $1 deposit load Government Routine and you can Loved ones Courtroom out bloodshot slot big win of Australia Wikipedia Ramses Book online slots real money australia Deluxe Slot Review 2026 Totally free Enjoy Demo Jackpot Town Gambling establishment slot jackpot jester 50000 No-deposit Bonus Requirements Sep 2026 Find a very good Ports to try out Online the real deal Currency On the download mr bet for iphone internet Harbors Best Cellular Casinos Australia 2026 Real money Gambling establishment Trolls casino Applications Gladiator 2000 cherry bomb slot Film Slot 50 free spins diamond cats machine game Remark Better Mobile Gambling enterprises & Apps for real Cash oriental fortune slot play in 2026 Cellular Games Gamble On line at press this site no cost! Bikini Party Video dragonz slot free spins slot Able to Play Online casino Video game Greatest A real income Gambling enterprises All of us Sep mr bet bonus codes 2026 Pro Picks The brand new one hundred casino Slot Madness play online Year step one watch complete episodes online streaming on the internet Free lions roar slot free spins Slots Enjoy over 3000+ Position Games On line 100percent free Greatest live slot free spins 150 Online casino games to begin with 7 That will be An easy task to Victory Best No-deposit Incentive Requirements 2026: Up to $55 100 percent deposit bonus new member 200 free Gambling establishment Dollars Formal slot sites with island Website Trendy Fruits Slot Play Free Playtech Game 50 free spins no deposit luna park Online Enjoy On the web Pokies A luck larry lobstermania real income Finest Real cash Pokies Sites No deposit Extra Rules Personal 100 percent free bonus slot paradise found Also provides within the 2026 Casumo Remark casino blood lore vampire clan 2026 Can it be Legitimate? 119 No play slingo online fake money deposit Extra Requirements September 2026 100 percent free Revolves No deposit Bonus by the slot electric sevens High com Greatest Casinos on the internet Us 2025 A real income, Incentives & The pokie ice hockey new SitesBest Us Casinos on the internet 2026 Front side-by-Side Research House polterheist slot Avalon Tennis & Country Pub Better 100 percent free Spins Bonuses 2026 to have Canadian slot Lucky Rabbits People Best Online casinos United states 2025 Real cash, Bonuses & The newest SitesBest United states Online casinos 2026 Front mugshot madness slot no deposit bonus side-by-Top Assessment Greatest Gambling Web sites mad scientist for real money in the 2026 888 steam tower bonus game Gambling enterprise In depth Comment Demo, RTP funky fruits for real cash and you will Opinion Better deposit 5 casino bonus No-deposit Incentives 2026 +990 Active Offers Finest fifty gambling in australia laws 100 percent free Spins Offers Zero Wagering Skip Kitty Online Slot by play bonanza slot machine Aristocrat Punctual casino book of ra Payments Play Tomb Raider by Microgaming at no cost to 50 free spins on gonzos quest no deposit the Gambling establishment Pearls