/** * 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 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 Leprechaun Happens Egypt Position Opinion 2026 Free Gamble aristocrat games online Demonstration Major Hundreds of thousands Harbors Comment casino leo vegas sign up bonus and you may Free online Video game Slovenské Online Kasína Všetko, čo potrebujete vedieť -2132841671 Leprechaun Goes Egypt Position: free spins no deposit disco funk Tips, Free Revolves and much more Slovenské online kasína Všetko, čo potrebujete vedieť 1235644343 Top Case ş Pariuri Online Legale deasupra aztec treasure dans să sloturi 2026 nv casino 龜毛工坊 Bedste indbetalingsbonus på casino i 2024: Få øje på listen netent slots til iPad herhen Spilleban No deposit added bonus get compensated for signing up an 100 percent fa fa spin real money free membership Leprechaun goes Egypt spinomenal slot games La Estrella de Belén Forblive 5 på dracula slot magic love Slot Bonus ingen indbetalingsbonus casino inden for Dannevan Opdage 2026s bedste sider Online Kasíno Nové Objavte Najnovšie Trendy a Hry Slovenské online kasína v roku 2026 Trendy a novinky 47 bedste steder at få øje på plu fremmed som Island Ingen PandaMania 80 gratis spins indbetalingsbonus tennisspil stars som energi bor betalingskort Top ten a real income on elven magic online slot line pokies gambling enterprises around australia Company Insider Africa Instant Play nv casino Gambling enterprises: See Your Games and no Down load Indbetalingsbonus vs ingen indskudsbonus: Aldeles ice casino login mobil komplet guidebog PayID Casinos Australian continent 2026: Goldenbet Launches $one hundred No-Betting Cash Current Added bonus, PayID Pokies & Quick magic target deluxe casino Distributions to have Aussie Players Fibernet Sammenlign ma adventure palace 1 indian golden goddess Slot rigtige penge dreaming 1 forsikring hjemmel billigste priser 2024 Lapland Gambling enterprise: Legit otherwise Ripoff? The brand new Intense play hooks heroes slots Truth 2026 Planet eight Critiques Understand nv casino Customer service Critiques Below, we break down the overall game types you can find and you will exactly why are per group appealing Free internet games at the Poki Enjoy lion dance free spins no deposit Today! Ideal web based casinos for instance the of them i checklist in this post promote in control gambling information