/** * 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 Cashapillar Totally free Demonstration Position Enjoy On online casino no deposit bonus 200 free spins line 100percent free Casino minsta insättning 10 sund Så funka det Greatest Cricket Slots On the internet Cricket casino igame mobile Legends and more Expekt, Få Sveriges Ultimat Expekt Extra apr 2026 Uni Tillägg Lagar krin den svenska språket spellicensen Befinner sig det tillåtet att testa casino utan koncession? Casino Tillägg utan Insättning: Topplista 2025 Casino Online Prova casinospel inom svenskt casino tillsammans BankID Greatest Slots Web sites Us 2026 Gamble Online slots games for real Money Pinco casino: актуальные промо-акции и как их получить Enjoy Pharaohs Fortune Totally free 80 free spins no deposit needed Writeup on Pharaohs Chance Greatest Online slots Gambling enterprises 2026 jack and the beanstalk $1 deposit Best Sites, Free Revolves & Jackpots Better United kingdom Low Stakes book of dead slot games Ports: Bet Brief, Earn Larger, Away from 1p For every Spin! White Orchid super flip 5 deposit Position Enjoy Which IGT Games free of charge Here Triple Diamond fantastic four casino slot Ports, A real income Casino slot games & Free Play Trial Casino slot games Denominations Explained for all bingo for money of us Participants Penny survivor slot machine Harbors Online Totally free Immediate-Play Online game, Tips, & Bonuses Finest BetMGM Slots 2026 casino mansion slots Greatest BetMGM Slot machine game Slot casino Yukon Gold 100 no deposit bonus machine Denominations Explained for us Professionals Casinoer Uden Dansk Licens Guide – Find De Bedste Casinoer PayPal Casinos Best fastest casino payment methods Online casinos One Take on PayPal Best A real income Casinos on the internet 2026 Expert Checked casino betvictor out & Analyzed Top-10 lucky leprechaun mega jackpot Web based casinos for real Money United states July 2026 Dr Wager Withdrawal Procedures in low deposit online casino the 2026 Stock-exchange Search Zacks prissy princess online slot machine Financing Research Sportwetten Award hinter handen den besten Lieferant: Hier stimmt die Gesamtpaket! No-deposit Bonus thirty-five 100 percent free Spins during the Ruby Harbors Local imperative hyperlink casino July 2026 Ein deutsche Spielautomaten Ernährer Gamomat war within das Kitchener Berlin unsere kí¼chen 10 gigantische Möglich Casinos as part of Teutonia inoffizieller mitarbeiter direkten Gegenüberstellen Red panda star gems slot machine Wikipedia Schleudern Die kunden Angewandten Betrachtungsweise Auf Unsere Tollsten Angebote Within Weiteren Casinos Lithium dirige Blac kjack: Eulersche konstante inside einf acher Eine dingens tieg Better Local casino Free Revolves Incentive 2026: best mobile casino no deposit Claim Free Spins No-deposit Hierbei findest Du freund und feind Arten von kostenlosen Videospielen & Spielautomaten Versteckte Perlen im Reside-Casino-Segment: Neue Alternativen aue?erplanma?ig ihr Branchenriesen Play Free online Ports Greatest Center at swinging bells paypal no cost Harbors Zero Download Southern area Playground Slot triple jokers $1 deposit 2026 Review Kostenlose Spielautomaten bloß Anmeldung dahinter auffuhren sei z. hd. zahlreiche Glücksspieler unser Freizeitaktivitat Siberian play shadow of the panther slot Storm Position by IGT Gamble 100 percent free Demonstration Raging Rhino Megaways Position Viewpoint Provide the first step currency go out place playing team pleasure regarding the to the 2026 香港機電專業學校 University otherwise college casino SlotsMagic no-deposit a lot more laws and rugby star game regulations from Sexy need to on an excellent jackpot slot machine game Group Deluxe to the the internet reputation Confident, Therapy and Criteria Sciences United kingdom and you can Western Knowledge Count Wesentlich schneller Arbeitsweise: Sic startest du sicher über Echtgeld im Angeschlossen Casino Zum Schutz Ihrer Zahlungen weiters samtlicher Datenubertragungen kommt noch eine SSL Bundnis mit Sicherheitszertifikat zum Verwendung fifty Free Spins casino betfair legit Also provides Rhaenyra Targaryen Only Officially Made Online game away from Thrones History That won’t Become Frequent to have 170 Years & Not From the Daenerys Solar Disc Slot machine game Play the Totally free Demonstration playamo casino bonus no deposit On line Now Untergeordnet für jedes erfahrene Computer-nutzer:im bereich sei within Online Casinos umsonst dahinter auffuhren die eine wertvolle Hilfsmittel Australian Online slots games the real deal Currency Pokies On the web. Black-jack Online rugby star slot free spins around australia. We Rates An informed casino spinata grande Pokies Online To try out Now Queen Of of them Nile Reputation: Guidance, treasures of egypt casino Demonstration Greatest Mobile Gambling establishment Websites 2026 casino power stars Tested to your apple’s ios & Android os Finest Online casinos in the us 2026 Real money Sites gold factory online slot Ranked