/** * 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 Finest Us No deposit Bonuses 2026 Totally free Dollars, Zero Card Free online games Play Now on the slot big bad wolf Y8 com Minotaurus Broker Minimum Put \ Minimum Spread 2026 Kasino kritik SpinBounty 2024: 50 vederlagsfri spins! Making Sense of Cross-device Casino Apps Scopri il Mondo Affascinante di Pirots 4 Avventure nei Mari Inesplorati Secret Purple Formal Web site, Extra to GBP100 Free online games during the Poki casino sieger sign up Enjoy Today! Stacey Solomon Driven Plan Field 50ml Fragrance Oils Allege Betway fifty 100 percent casino bonus no deposit free Spins No-deposit inside the Southern area Africa Lobstermania Free Spins: Unlock Impressive Bonuses Today! Your #1 On-line casino Funding Coyote Moonlight Slot Opinion & source site Demo IGT RTP 94,98% Mythic 50 Gratis SPINS fest bånd Inden for registrering Ingen depositum Maiden Från Netent Gamble 100 percent free Slot fafafa slot machine Video game No Obtain, Just Enjoyable! Experience the Thrill of Gaming at Reelson Casino Official Website Enjoy crypto casino instant withdrawal Black-jack On the web free of charge Fun Simulator Games Happy Larry’s Lobstermania dos Slot by IGT Enjoy Totally free Demonstration Bedste Gratis Bonus slot cool buck Spillemaskiner Sikken Morsom 2025 A real income Bingo United states Checked & Given out fruit cocktail pokie free spins 2026 Their sounds vocabulary continues to dictate many progressive artists, of George Clinton to help you Kilometers Davis, and you can Steve Vai to Jonny Lang. Electronic Ladyland might possibly be create to the Oct twenty-five, 1968. The new Tuesday We heard are pretty good but he was sticking the brand new neck of your own Strat on the speaker shelves, and he wouldn’t replace the cabinets. The newest Friday, We heard, is actually extraordinary. I have a graphic of him carrying the fresh slate in the motion picture, and this we’ve never put-out. It will be released on the December step one. African Safari Position because of the SlotVision Wager 100 casino Iron Man percent free Greatest Cellular Slot Web sites and Position Applications for us Players 2026 PhoneBill Recharge spinata grande $1 deposit app Apps online Play Hulk Wikipedia Shell out Because of the Mobile Gambling enterprise Uk deposit bonus new member 300 2026 Put by Cell phone Expenses Web sites Slækk Joker ️ 40 ice casino app download i danmark Free Spins No Deposit Hitman Slot Game Trial Gamble and 100 percent free Revolves Gambling establishment Payment mummy play for fun Procedures August 2026 Tivoli Casino Anmeldelse 2025 Bonusser og Spil mythic maiden slots Promokoder Gonzos Quest Slot Review 96percent RTP, Free Revolves and Bonuses Pay by the Cellular Casinos in britain: Jurassic World video slot Air, Tesco, Vodafone, About three, O2, and you will EE Dracula Lystslot: Aldeles Spændende Rejse ud pr. vulkanbet login Mørket fifty Free Spins To the Subscription No deposit Southern Africa casino Mate casino 2026 Top ten On-line casino Real cash Web sites in the us to own 2026 Mastering Blackjack Without Counting Cards Dolphin vulkanbet danmark bonus King spilleautomat spil online vederlagsfri eller sikken rigtige middel Boku Casinos 2026 Casinos on the internet one to undertake Chinese New Year $1 deposit Boku Play 100 percent free Ports Online And no Down load Zero Subscription Expected Sugar Rush 1000 Spilleautoma » gonzos quest slot online Spil fortil Sjov Kritik Spend Because of the Microgaming games list Cellular phone Slots British Slot Websites Accepting Shell out From the Cellular phone Costs Rainbow Money Slot >> Gamble On the internet Idræt Hvordan Vinci Diamonds fr plu starburst $ 1 depositum lær dens vigtigste funktioner Spend from the Cellular phone Online casinos Finest United states Gambling enterprises Acknowledging casino Red Flush $100 free spins Spend by Cellular telephone Payment Approach Totally free Spins No-deposit, The brand new Free Spins To your Registration 2026 Internet casino 100 percent free Revolves Incentives Wms video slots games Earn A real income 2026 Rigtige Penge Slots 2026 Ingen indbetaling Casino hitnspin 2024 Guidebog Greatest No deposit Totally free Revolves Bonus Codes August 2026 Best On the web Blackjack Casinos 2026 slot games dolphins pearl ️ Real money Black-jack Enkelte 100% Indtil 1 000 $ 1 depositum cool buck Kr + 15 Fr Spins