/** * 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 Beste Wettanbieter ohne OASIS: Sicher und schnell auszahlen – so funktioniert’s Gareggiare sopra contanti escludendo base: quale funziona? Che ammettere il bonus ossequio dei sterminio online Tasse sul casinò online al di al di là dell’UE Ho aderente circa meccanicamente, progetto dalla curiosita prevalentemente Non ce l’hai e ancora vorresti richiederla? Think Your Norm Casino Слоты Is Safe? Nine Ways You Can Lose It Today The ultimate guide to high RTP games at Duel Casino: play smart and win Exactly how we Viewpoint The big Uk Casino Internet Strategies for Choosing the best Anticipate Added bonus Choosing the right Gambling enterprise Website to you personally Das bekannte Softwarehersteller ist unter langer Zuruckhaltung vom Glucksspielmarkt wiederum hinein ausgewahlten Casinos nach finden Sera verlangt sera Spielern, einige Spiele auszuprobieren & herauszufinden, pass away ihnen an dem wichtigsten liegen Sprich zwar nicht, sic Die kunden nichtens untergeordnet mustergultig qua Fiat-Wahrungen erstatten konnten Unser Bonusgeld vermag sodann postwendend fur Einsatze verwendung finden Gamer innehaben selbige Gelegenheit, Einzahlungslimits ferner Zeitbeschrankungen hinten vergehen Explorando el Mundo del Juego en 10bet Una Guía Completa They might be a well-recognized option for people that have a giant money, while they could potentially own larger masters Mobile places allows you to make use of your mobile to help you help you deposit and you will repay it on your own 2nd mobile phone expenses Mobile dumps makes you make use of mobile phone so you’re able to put and pay it off on your second portable costs Bezpieczne logowanie i rejestracja w Spinamba Casino: co warto wiedzieć? Because of the exploring all terms and conditions, we discover and that free spins hold real really worth Join the action at Fast Withdrawal Casino UK: Your path to real money and Die Erscheinungsform des Casino Maklercourtage abzuglich Einzahlung ist und bleibt ebendiese mutma?lich beliebteste Einige Casinos verheimlichen wichtige Bonusbedingungen in den Allgemeinen Geschaftsbedingungen (AGB) unter anderem nach Unterseiten Top Online Casinos That Approve Neteller Deposits Free Online Gambling Establishment Gamings: The Ultimate Guide Scopri Come Acquistare il Bonus nel Book of Dead Talletusbonus Ilman Kierrätystä ja parhaat kasinotarjoukset vuonna 2026 — Talletusbonus Ilman Kierrätystä Online Winner Casino Discover Your Winning Opportunities Navigating King Casino Online without the Usual Confusion Test Post Created In Alpenrepublik Umsetzbar Kasino Über Handyrechnung Saldieren ist RoyalGame sicher 2024 5 Euro Telefonrechnung mit Kreditkarte bezahlen Prämie Bloß Einzahlung In Deutsche Casinos 15 Eur Bonus Exklusive Einzahlung Inoffizieller mitarbeiter i24Slot partner login Kasino Comeon eye of the horus Casino Schätzung Big Bass Bonanza Scopri il Fascino del Gioco di Pesca Virtuale Via Beautiful Nature Mobil Angeschlossen BetWinner Vklady a výbery na dosah ruky Test Post Created Gehaltlos Spielbank Unter einsatz von Kasino 10 Einlösen nützliche Quelle 50 Spielen Handyrechnung Saldieren Österreich 2024 Dolphins Pearl Classic, Legal Inoffizieller mitarbeiter Die besten Power Stars Rtp Slots online Angeschlossen Casino Aufführen! Pin-Up: лучшие мобильные приложения для азартных игр на ходу Gates of Olympus Un Viaggio Divino nel Mondo delle Slot Pin-Up casino-da pul çıxarmaq: sürətli və etibarlı yollar Navigating Grosvenor Bet feels like stepping into a familiar yet surprisingly sleek corner of the betting world Test Post Created Bedste i24Slot login Danmark tilslutte casinoer foran danskere i 2025 Scopri il Mondo di Plinko Gioca a Plinko e Vinci! Tilslutte Spilleban, 70+ Bedste Danske Ybets login Danmark Tilslutte Casinoer 2026