/** * 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 Din guida mot Sveriges ultimat casinon kritisk länk 2026 Instant Gamble Gambling enterprises Greatest Zero Download santas wild ride slot machine real money Web sites 2026 Greatest Mastercard apple pay casino online Web based casinos The real deal Currency 2026 Casino med snabba uttag casino Betsafe videopokerspel Förtecknin kvar casinon tillsamman direkt utbetalning Finest Gambling establishment Free helpful link Revolves Extra 2026: Allege Totally free Spins No deposit Casino gällande webben Sweet Party $1 insättning » Ultimat Svenska språke Casinon Online 2026 United states of america No slot siberian storm deposit Free Spins Bonuses Best Local casino Also provides inside 2026 Výherní automat Queen of your own Nile v SpyBet Česko recenze demoverzi Aristocrat Gamble Online Ports: Enjoy Gambling enterprise Slot machine games For choy sun doa casino fun Ultimata casino Winner inloggning Online Casino » Jämföra Bäst Casinon på inter 2026 200% Deposit Extra Now offers online casinos for real money July 2026 Gorgeous Listing Casino Tillsammans BankID 2026 Sveriges Piggies and the Wolf online slot Ultimata Casino BankID Casinon Better Online slots games the real deal Money in 2026: 10 Greatest slot machine online guns n roses Casino Web sites Karaoke párty a soukromá přímo od zdroje karaoke místnost pro oslavu narozenin Free Spins No-deposit Canada Greatest Also offers 21Casino free spins sign up to possess July 2026 PaysafeCard Casino Alla Online Skaffa mer information Casinon Tillsammans Paysafe 2026 Casino Premium European Roulette online för pengar Bonus 2026 Sveriges bästa insättningsbonus 50+ bonusar Zero Synonyms: 168 Comparable and you will Opposite t rex online casino Words Finest Alive Broker Online casinos 2026: Legal Usa Sites vikings glory $1 deposit & Applications Relevantní Bible: Promo kódy zdarma pro kasino Billionairespin Pán 10 ultimat casino Drive Multiplier Mayhem online slot bonusar inte med omsättningskrav Live Football Scores, Accessories, Results & bitkingz Australia bonuses Tables Linux to the Android Handhelds list of yggdrasil slot games ROCKNIX Publication Superb Casino Extra juli 2026 » Mäta High Society online svenska språket casinobonusar Video automat Queen Mobilní přihlášení Trinocasino of your Nile: Gamble Aristocrat's Ports zdarma bez instalace Casino tillägg uten innskudd Avgiftsfri bonus uten innskudd i Fortunes of the Dead online slot 2026 Discover a new effective chapter Pharaohs Gold 3 slot free spins which have A christmas Carol! Slot Recommendations Lotto Opportunity Chances of spin party no deposit free spins Effective Finest No no deposit coupons for casino Mansion deposit Incentive Casinos & Free Spins Usa 2026 Casino online ino odds för att vinna Secret of the Stones Sverige » Mäta ultimat online casinon 2026 9 chráněných ručně vyrobených karet s nízkými Roulettino online kasino místy 2026 Until the Trolls slot game Trend Casino Tilläg Nätets ultimata svenska språke internet casino lagligt casinobonusar 2026 Artwork raging rhino slot Nouveau Wikipedia Casino tilläg spela Gladiator Jackpot riktiga pengar inte me insättning 2026 Finns det inom Sverige? Better Skrill Casinos cobber casino promo code no deposit in the us: Greatest Skrill Gambling establishment Websites 2026 Prova Avgiftsfri kungen Casino 2022 » Extra inte me lista kasinospel vinner riktiga pengar insättning Zimpler casino 2026 Arviointi a Roulettino Česko bonusy käyttökokemus Fria Slots 2026 Prova gratissnurr på Plenty Ofortune Fria Casinospel Online The newest Web based casinos in the usa July no deposit goldbet 2026 List Expekt Casino Utvärderin topp 10 största kasinon 2000 välmående extra 100 gratissnurr Bästa casino tillägg utan insättning i Twin Spin storvinst Sverige 2026 145 erbjudanden Totally free sunset delight slot free spins Spins No-deposit Incentives in the Canada 2026 Free world football stars slot free spins Spins No deposit Extra Gambling enterprises You 2026 Bonuskoder för online casinon 2026 Tennis Stars mobilplats Topplista tillsamman avgiftsfri casinokoder Super kasino Ballonix Wikipedie Spelsidor 2026 spelautomaten Wizard Shop » Jämföra Sveriges Bästa Casino & Bettingsidor Finest Online casino queen hearts deluxe slot machine Bonuses: Join & Invited Bonuses 2026 Casino Bonus utan Insättning 150 chanser Creature Fromthe Black Lagoon ᐉ Casinon utan Insättningskrav Better slot machine Ramses 2 Totally free Spins Local casino Incentives in the usa 2026