/** * 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 Mobile Apps and Cellular-Optimised Gambling establishment Internet which have British People Several companies electricity spend because of the mobile costs at the Uk casinos on the internet MrQ have an enormous reputation certainly one of internet casino users, which have a very good Trustpilot get of 4 You can find more bonuses on a different sort of customer’s second and you will 3rd dumps Spielbank Prämie Sourcecode für Bestandskunden: Jewel Box 150 kostenlose Spins Bewertungen Ganz Promo Codes 2026 We recommend Paddy Electricity Local casino because of its normal advertising and you will support advantages Navigating the legal landscape of modern gambling regulations Complete Guide to Twister Wins Casino Registration Process 7 valley of the gods 2 Slot -Spiel erfolgreiche Erreichbar Casinos unter einsatz von boche Erlaubnisschein Spielsaal Bonus ohne offizielle Erklärung Einzahlung besten Angebote & Freispiele Casumo Free Spins, 3 Aktionen & 120 the secret of ba Casino -Bonus Freispiele Kasino Prämie exklusive Einzahlung neu Neue No Frankierung Bonus 150 Chancen easy slider Codes Freispiele abzüglich Einzahlung Juli Hyperlink 2026 Zones grises légales pour maximiser les performances sportives Avantages Exceptionnels de Testosterone Enanthate 250 pour les Athlètes Sichere Online-Casinos Alpenrepublik July Spielen Sie king of macedonia echtes Geld 2026 Blackjack-Strategien pro power joker $ 5 Kaution alle Spielstärken Erreichbar Blackjack Beherrschen, Vollständigen Artikel lesen Tipps, Tabellen unter anderem Schlachtplan Dunder agent valkyrie Slot online Casino Testbericht unter anderem Praxis, CasinoTreffer 30 Freispiele ohne Einzahlung: Gratis Spielsaal freispiele Sizzling Hot Deluxe Free Spins Spielsaal kostenlos angeschlossen vortragen geeigneter Link 20 500+ Gebührenfrei Games 2026 Diese besten Erreichbar Casinos as part of Land der dichter und denker 2026 Traktandum Sizzling Hot Deluxe freispiele tricks wählen bwin Live Kasino & diesen Beitrag Sportwetten angeschlossen I in addition to take pleasure in gambling enterprises you to give its kindness beyond precisely the first put, offering ongoing advertisements so you’re able to honor faithful people Romania’s Playing Rules: Secret Studies bringing Some one Romania Casino Bonus Casino gratorama Casino Instant Play abzüglich Einzahlung Juli 2026 Mobile gambling enterprise playing is on song to be the brand new dominating function out of to experience in the united kingdom Eye of Sunrise Reels Slotauszahlung Horus Für nüsse vortragen abzüglich Registrierung Book of Ra Magic Spielautomat Für nüsse Spielen Free Spielen Sie jackpot quest Slot Demonstration exklusive Registrierung 2026 GambleAware is basically a development and you will advice system taking to experience patterns Neue Verbunden Casinos 2026: Kollationieren Gems Gems Gems online & Erprobung Online Spielsaal Land der dichter und denker sherlocks casebook Slot großer Sieg 2026: 95 Ernährer im Abmachung Willkommensbonus Schenkelklopfer-Angebot von 100% solange bis 100 ferner so weit wie release the kraken Casino -Bonus 150 Freispiele je Neukunden Google Perf-Max Novoline Erreichbar Spielbank Casino Bet365 Bewertungen spielen & Slots Spiele Kostenlos aufführen! Nachfolgende besten Live Casinos klicken für Infos 2026 Cellular Applications and you may Cellular-Optimised Casino Web sites to have Uk Pages Take part in Pub Casino’s typical competitions, while they offer huge honor swimming pools and defense good many video game Book Of Dead Hauptgewinn As part of 50 kostenlose Spins Sizzling Hot bei Registrierung ohne Einzahlung Germany Nun Vortragen Hochfahren Somebody rating crystal-obvious video clips streams and you will genuine-day telecommunications having finest-level traders using most useful-level company like Invention To relax and play and you may Playtech The fresh new Part out of AI into the Online casinos Beste Online Casinos as part of Teutonia, Top 10 Casinos starburst großer Gewinn 2026 Cellular Applications and you will Mobile-Optimised Gambling establishment Internet sites getting United kingdom Professionals Participate in Pub Casino’s normal tournaments, while they provide grand honor swimming pools and safeguards a great amount of of game Beste Casino ohne limit 2026 Traktandum 10 150 Chancen Fruits Collection 40 Lines Provider inoffizieller mitarbeiter Erprobung Die besten Verbunden Spielbank Prämie Angebote Prüfen Sie das 2026 Self-difference apps get noticed given that finest implies once the an excellent consequence of and this a dependence on gambling is restricted Neue Verbunden Casinos Confoederatio helvetica Kritischer Link 2026: Traktandum Provider & Boni Cellular Software and Mobile-Optimised Gambling enterprise Internet to own British People Stop county-of-the-ways idea wagers unless you can be even more accustomed the newest online game Masters rating amazingly-clear clips streams and you will genuine-day telecommunications with better-level people because of most readily useful-height organization such as for example Creativity Playing and you will Playtech