/** * 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 Kosteloos Spins gedurende Aanmelding 2026 ⭐ 150+ Casino PrimeBetz promotiecodes Free Spins Noppes gratis Ash Gaming gokkasten geen download met bonus Gokkasten Spelen Proefopname Slots Buitenshuis Inschrijving Vinnig kosteloos online gokkasten Casinomeister slot Niemand downloa ofwel aanmelding vereist Gokkasten ervoor genot Eersterangs 5 Eigenlijk Strafbaar Online gokkast Igrosoft Casino’s Speel plusteken bries in geld Vinnig voor gokkasten plus genkele BetPrimeiro mobiel inloggen downloa Nederlands offlin gokspellen Scoor noppes spins Avalon II 3d slot ervoor dit NetEnt gokkast > 2026 Noppes Coyote Cash gratis spins geen storting Spins te Offlin Casinos Speel in Free Spins! Speel Mateloos Tal Offlin Slots Online Gokkasten Kanga Cash gokkast gratis spins Unibet Programma Noppes Spins 30 gratis spins Shoot 2026 Complete Staat Free Spins NL! Monsterwincz CZ 2026 Budoucnost online hazardních her Finest Payment Online Slot Machine for Ultimate Gaming Experience Play for free Slots Online Best two hundred% Deposit Incentive Also offers in the uk to have July 2026 200 Totally free Revolves No-deposit Biggest 2 hundred+ Free Spins to possess 2026 Greatest $two hundred No-deposit Added bonus that have 200 FS Online casinos 2026 Better No deposit Gambling enterprise Incentives Appeared to possess July 2026 Top 10 150 Free Spins No deposit Casinos Usa Play Indian Fantasizing Pokies On line Rewarding Jackpot Slot machine game Video game Stanley Glass Playoffs Buzz: Capitals can be tighten East wild-cards competition Free Greeting Extra No deposit Necessary July 2026 Dollars signal Wikipedia 100 percent free Revolves No Deposit & No Wagering Standards 2026 Magicplanetkasinozc CZ 2026 – Kompletní průvodce registrací 1462908046 Jack and the Beanstalk Position Comment Having a no deposit 100 percent free revolves bonus, you might twist the fresh reels for the only particular game. Web based casinos that provide an enrollment no deposit 100 percent free revolves extra simply need one sign up its program in order to allege. Typically the most popular no-deposit 100 percent free revolves bonus is certainly one provided to your subscription. As the label means, a no deposit totally free revolves added bonus will give you a certain number away from 100 percent free revolves instead of to make a deposit. Mr Eco-friendly Casino: fifty No deposit Extra Revolves For the Subscription Zero Wager No deposit Bonus: Keep the Earnings within the 2026 No-deposit Bonuses 2026 best totally free casino bonuses one hundred Totally free Spins No deposit for the Registration The fresh Bonuses The best $step one Put Casinos readily available global in the 2026 Casinofairspin CZ 2026 Budoucnost Online Hazardu 1486840609 Mostbetceske CZ 2026 – Registrace 1504862515 Cosmobet CZ 2026 – Registrace Vše, co potřebujete vědět 1488769484 69gamescz CZ 2026 Budoucnost Online Gamingu Roobetkasinocz CZ 2026 – Registrace a Bonusy pro Nové Hráče Deluxe Way of life Rtg game software Totally free Ports Play casino Spin Genie 50 free spins no deposit 100 percent free Slots No Obtain No Registration Enjoy 13,000+ 100 percent free Slot 8 rows online slot game Online game Zero Download Needed Usa The newest Online slots games 2024 To try out Treasure Island casino game Free and For real Money one hundred Totally free Revolves No deposit Lightning Link win Canada ten Totally free No-deposit Gambling The Ming Dynasty online casino enterprise Uk Bonuses In the March 2023 The best 100 Playtech slot machine percent free Revolves Zero Play 100 percent free Coyote Moonlight Slot Servers Deposit Bonuses To have September 2022 Explore the Thrills of CasinoLab Casino A Comprehensive Review Double Diamond Slots, Real money Video slot and Totally Mr Play best casino game free Gamble Trial Slots Gambling Crime/adventure slot enterprise Monsterwinkasino CZ 2026 – Registrace Vše, co potřebujete vědět 1504455328 Las vegas 100 pound deposit online casinos Journey Casino slot games Enjoy Genuine Las vegas Position Video Xon bet agent app download game On the web 100percent free At the Doubledown Casino Wolf Work on Slot Mr Bet casino loyalty points Review 2024 Because of the Igt Zero Obtain Casino Maniwaki, 999 Free Revolves casino Syndicate real money No-deposit