/** * 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 Cash Splash Slot Review ? 2020 RTP 91 51% Free online 3d Harbors Enjoy&Earn Today Intrusion Avoidance Program Accessibility Declined Max Admission Unlimited Subscription CashSplash Gambling establishment 2026 Log on & Score no-deposit incentive password Dollars Splash Position Games Microgaming Remark & Score three dimensional Ports Free Games For the Better Jackpots Splash Sporting events Referral Password July 2026 Get $ten within the Splash Borrowing from the bank Added bonus! Greatest On the internet Pokies Australian continent 2025: Top Bien au Pokie Sites Better Australian On the internet Pokies the real deal Cash in 2026 Greatest Real money Casinos on the internet Current Checklist Can you Beat Casinos on the internet? Specialist Information Better Real cash Online casinos in america 2025 Burning Focus Demo Gamble Totally free Slots in the Great com Burning Attention Slot Comment, RTP, Have & Free Enjoy Demonstration Beginners’ Book: How to Earn in the Gambling establishment Slot machines Burning Attention Position Review and Free Trial 96 19% RTP Burning Attention On the web Position Opinion 2026 Wager Totally free Now Burning Attention Demonstration Gamble Totally free Harbors at the High com Consuming Attention Position Comment Consuming Focus Position Video game- Winnings Jackpot of 90,000 and revel in Consuming Desire Casino Game Greatest $step 1 Deposit Gambling enterprises Minimal Deposit Gaming Internet sites 2026 Crazy Buffalo Slot: Play 100 percent free Slot machine Online No Subscription Authoritative Slot Demonstration & A real income Buffalo Ports: Play 100 percent free Demo Video game Instantly Buffalo play trial for free from the Aristocrat Buffalo Silver Collection Internet casino Instructions, Free Ports, Thumb Incentives, Larger Earn Videos Split Out Casino Coupon code Crack Aside Slot: Comment, Bonuses & Totally free Gamble Finest Totally free Twist Extra No deposit Offers without-Deposit Free Spins Best No deposit Rules in the All of us Web based casinos in the 2026 Play Break Out On the internet Slot at no cost or with Added bonus An educated The brand new Casinos on the internet Value Seeking to within the July 2026 The brand new Online casinos Usa 2026 Recently Founded Web sites The newest Casinos on the internet 2026 Better 15 Latest Gambling enterprise Internet sites Publication Of Ra Luxury six 100 percent free Video slot Online Publication out of Ra Internet casino Play for Free Gamble Guide away from Ra Real cash Slot Finest three-dimensional Ports Online casinos 2026 100 percent free and you can A real income Zero Download Slots On the web 2026 Free & Real cash No Install Harbors Book out of Ra Demo On the internet Enjoy the types 100percent free inside the 2025! Better 3d Harbors in the 2026 Enjoy 100 percent free 3d Harbors on the Gambling enterprises com Publication out of Ra Deluxe Slot Review: Trial, 100 percent free Revolves, RTP Publication of Ra Deluxe Position Remark Spin the new Reels free of charge Book out of Lifeless Demonstration Slot because of the Play’n Go Totally free Gamble & Comment Opinion and trial of online position with RTP 96% Rich Insane Book of Dead Position Review RTP, Totally free Revolves & Trial Book away from Deceased Slot Review Where to Play Book out of Dead Guide away from Inactive On the web Position Wager 100 percent free 2025 Finest No deposit Extra Gambling enterprises in2026 No-deposit Incentive Requirements