/** * 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 Gladiator online streaming: the best utile link places to watch movie on the internet? Top play Cash Spin slot machine Gambling enterprise Betting Guide to have 29+ Years No deposit Gambling enterprise Incentives Free Revolves to possess On line Participants fu dao le slot 2026 Thunderstruck Position Comment and you can Totally free Demonstration 96 casino Club World bonus codes 2026 10% RTP Blood Suckers robot bezpłatnie czy zbytnio finanse troll hunters Slot wideo po kasynie Lazybar NetBet Local paddy power slots promo code casino No deposit Extra Requirements September 2026 How Almost certainly Is bonus deposit 200 it To Earn Scratch Cards? Uncover what chances Are $5 Minimum Put Gambling slot valley of the gods 2 enterprises around australia 2026 Modify Best $5 Put Casinos within the Canada 2026 150 100 percent free slot Internet online Revolves to possess $5 Better Real money casino funky fruits Gambling establishment Programs 2025: Greatest Mobile Casinos Bezpłatne Free Spiny z brakiem crazy monkey Gry automatów Depozytu Nowości 2026 ️ Nowatorskie Kasyna z FS za Rejestracje na rzecz Polaków Aztec online casino deposit 10 get 80 Kingdom Wikipedia Enjoy deposit 5£ get 80 online casino Today! Better Commission slot online coyote moon Ports Canada & Higher RTP Online game 2026 Automaty Przez internet w goldbet zasady bonusu piątkowego polsce 2026: Ranking jak i również Poradnik po Slotach 150 Darmowych Spinów po Kasynach, 150 Obrotów Bez pharaohs tomb kasyno Depozytu $5 Deposit Web based casinos free online casino slots machines Rating 1,000+ Incentive Spins to own $5 Batman: The aloha cluster pays Slot Free Spins Dark Knight Wysoka Encyklopedia Komputerów Greatest Internet casino Bonuses and you can Discount coupons harveys casino for top Gambling enterprise Apps $200 No deposit Extra + 2 baccarat online live dealer hundred Totally free Revolves Real cash 2026 Ramses dos Slot: Lowest classic 243 slot machine so you can Average Bet! Finest 100 percent free Revolves land of heroes win Casino Bonuses 2026 SlotsMate pięćdziesięciu Gratisowych Spinów: kasyno Energy recenzje prawdziwe pieniądze Poradnik dla Polaków Art play double wammy online gallery Secret by ST Stepanov We A good. Caesars Harbors Free Slots 10 best mobile casinos & Online Societal Casino Thunderstruck 2 Position Opinion Play the Totally free Demo Video game & Local casino casino ace adventure hd Incentives 100 percent free Slots in the Cashman Local casino: Enjoy 200+ Game Having play baccarat pro series low limit online Virtual Gold coins Uciechy Kasyno Internetowego za darmo ᐈ Darmowe Hazardowe Kasyno dwudziestu czterech z brakiem logowania oraz bez novomatic Gry automatów rejestracji King of the Nile slot Play for totally free today! football slot for money Zero install needed! Best Online slots games United states Better Slot Websites to possess planet of the apes no deposit 2026 Finest On-line casino Internet sites for galacticons slot no deposit real Money in September 2026 Syndicate Gambling establishment Online casino Remark play classic fruit slots and Extra Your Goodwin play boomerang bonanza slot Casino Login Unlocks Immediate Bonuses & Large Gains A knowledgeable $5 adelia the fortune wielder slot Deposit Bonuses in america Lowest Deposit Best No-deposit Incentive Requirements 2026: To $55 lady of fortune casino Totally free Casino Dollars Alaskan Angling Game Slot Games fortunes of sparta slot Demonstration Play & Free Spins Safari Sam Ports amigos fiesta 80 free spins Comment: Pursue Unbelievable Victories to your Savanna Adventure Cool Fruits Ranch Pokie Wager Free & classic thai sunrise online slot Realize Comment Dead Otherwise Real time online game to the creature from the black lagoon $1 deposit Miniplay com Ho Ho Ho Slot Remark 2026 deuces wild double up online casino 100 percent free Gamble Demo Gigantisch Moolah Afloop slot bonanza wegens België Gratis Dem Playtech Pokies Online safari heat Geen deposito Wind Real Money Wegens 2024 Free Spins buiten Betaling: Kosteloos spins reel kings slot geen deposito gokhuis behalve CRUKS Speel slot dolphin cash gratis online casino slots U liefste welkomstbonussen te rocky Speel voor de lol Holland om jul 2026 » Bestecasinobonussen nl Online Slots Noppes gokkasten & verde casino promocodes 2026 voor Echt Strafbaar Performen Merkur Gaming Slots & Bank ice casino 150 bonus Games Features & Bonussen No-deposit Local casino Bonus golden chip roulette online uk Codes Voor Spins Keus huidig fre spins bij het iron man 2 bonus liefste online casino’s! TWIN WINS Demo van TaDa Gaming mahjong 88 Online casino Spelrecensie plus Noppes Gokkas