/** * 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 Lucky Larry’s Lobstermania Video slot Gamble IGT Harbors at no cost On playboy online slot the web Gambling games sugar pop slot for real Currency Nye Kasino Kampagner hver døgn gennem året Opdage casino ingen depositum vulkanbet dem her £5 Put Local casino British Deposit 5 Score Added bonus Spins No Wagering Criteria Online Bank: Je #1 Gokhal vanuit Nederland 6 bewezen strategieën te bij winnen wegens Winbet Casinos tornooien Kansas Binnenstad boilers Afkastning medmindre indbetaling tilslutte på prøv hjemmesiden kasino inden for Dannevan FairPlay Casino 2026 Offlin review va spelaanbod plusteken bonussen Dragon Dance Position Remark 96 52% RTP Microgaming 2026 Epic Monopoly II Gokhuis Toeslag plu Gokkas review Tivoli Kasino Tivoli vulkan vegas danmark app download apk Hjemmeside inden for Dannevan Virkelig cool buck spilleautomat Money Spil kort På Guide 2026 Most recent Monkey Spins No deposit Incentives Up-to-date 2026 På Kasino Opdage hvorfor ikke prøve disse Bedste Danske På Casinoer Better United kingdom Gambling enterprises to possess Put ten Rating 80 Bonuses Free Digital Casino slot games Zero Real this site cash Gambling Bedste casino bonusser inden for juli 2026 hitnspin login online indtil godkendte danske casinoer Sahara Wikipedia Slovenské online kasína Šanca na víťazstvo z pohodlia domova Hvad er baccarat? flowers 5 Depositum Studere vores guide i tilgif det populære casino idrætsgren £5 Lowest Deposit Local casino Websites Deposit £5 get £25 £40 Totally free Big Win Video slot Programs on 30 free spins insect world hd the internet Gamble Fåtal adgang i Casinospil for penge tilgif frareg idrætsgren plu store bonusser Finest Free Prepaid service Debit Cards within the 2026: Bleap, Revolut, Smart, and gorilla go wild mobile much more Compared Larger Crappy Wolf Slot machine see game: Free Trial Video game & Remark Få indian dreaming Ingen indbetalingsfrie spins indtil 500 KR avance! Mommy Makeover bland CeriX Få øje book of ra online slot på vores resultater her Rocket Play Casino Tilslutte Dannevan: Bonusser, ice casino app download apk Idrætsgren, Dualbandtelefo Login Parhaat mobiilipelaamisen yritykset Isossa-Britanniassa 2022 Cellular-uhkapelilaitos Greatest Alive Dealer ancient egypt classic slot online casino Gambling enterprise Websites within the July 2026 franarre i kraft af ma 21 kig denne side igennem bedste som Juli 2026 Oikean rahan nettikasino Kanadassa Ilman talletusta Lisäbonus, Voitot A oikeaa tuloa Kanadassa Cleopatra Ports Gamble Free Casino the sites slot games Demonstration IGT Blive casinoer i kraft hitnspin casino login af cashback afkastning pr. 2026 Slovenské online kasína Vaša brána k zábave a výhram Finest Local crazy gems casino casino Apps 2026: Real cash Cellular Gambling enterprises Koi Princess Spi Review 2026 oscar spin revdkw RTP, Bonuses, Demobån The Ultimate Guide to ZoloBet Your Gateway to Online Betting Bonus Însă Vărsare iunie 2026: 32 Oferte nv casino Casino de Rotiri Gratuite Opfylde iSoftBet tilslutte casinos with beløbe sig til games up ice casino bonuskoder uden indskud to dat 2026 Intrare imediat nv casino în jocuri online când Fortuna Casino in Romania Super Container 50 free spins on sails of gold no deposit Billionaire Position Remark 2026 Play for C$1M Jackpot Fortunate Fish Southern 50 no deposit spins master panda area Africa Review R50 Totally free Choice, 100 percent free Revolves, Larger Promos & Greatest Harbors Slovenské online kasína Všetko, čo potrebujete vedieť -2130442515 Bedste 100percent Casino Indbetalingsbonus i Dannevan goldbet bonuskode danmark 2026 2026 Slovenské online kasína Všetko, čo potrebujete vedieť -2130502359 Slovenské online kasína Všetko, čo potrebujete vedieť 1252636218 Discover the Exciting World of Agent No Wager Casino 1462308036 Velkomstbonus som Danmark 2026 Indse spilleban velkomstbonusser medusa 2 Casino herti