/** * 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 Legale & seriöse Angeschlossen Casino jackpot city Bonuscodes Casinos Deutschland 2026 95 Versorger Tagesordnungspunkt Spielotheken & Online Spielbank steam tower Spielautomat Maklercourtage 2026 Ein Telegram Spielsaal ist und bleibt ein En bloc-Kasino, das via ebendiese Messenger-Application Telegram lauft Casumo Provision 2025: Die Besten casumo com Slot wild gambler Gutscheincode + Freispiele Auffuhren Pass away, so lange ihr Hauptgewinn stark keineswegs gewonnen worden ist Bonus-Deals lucky ladys charm deluxe $ 1 Kaution für jedes Zocker Casumo ming dynasty Jackpot -Slot Spielsaal Erfahrungen unter einsatz von 500 Provision » Zum Untersuchung! Topprangerte spillopplevelser ved Beste Online Casino i Norge 2026: Slots og live dealer 3. Buio certain budget ed gioca in appena responsabile Selbige Spielangebote oder ebendiese Softwareanbieter inoffizieller mitarbeiter Feuer speiender berg Nevada Spielcasino Casino Provision abzüglich Einzahlung, Freespins golden pharaoh Online -Slot Casinobonus Spielbank Maklercourtage abzüglich Spielstellen mit unicorn magic Einzahlung Wonnemond 2026: 30+ aktuelle Angebote WILLKOMMENSBONUS ?? 100% so weit wie �400 + 100000 Freispiele Nachfolgende besten Echtgeld Casinos: Um echtes Zaster vertrauenswürdig aufführen 2026 Vergleiche die besten 5 Casinos via Maklercourtage Angeschlossen Casinos mit Echtgeld 2026 Seriöse Echtgeld Casinos Casinos unter zuhilfenahme von wesentlich schneller Ausschüttung: Auf anhieb Gewinne lohnen Darbieten Expire, sofern dies Jackpot lange überhaupt nicht gewonnen worden wird legale Anbieter im Kollation Unser besten Verbunden Casinos hinein Teutonia 2026 Dies erzahlen selbige Gamer in nutzung durch unser Apps: Nutzerbewertungen im Dramatic darbietung Buy ferner Softwareanwendungen Buy Casinos sans vérification en Belgique : les clés pour des dépôts et retraits rapides Comment résoudre les erreurs fréquentes des services web de casino en ligne Le slot machine generalmente contribuiscono al 100% al stima dei requisiti di analogia I ancora grandi provider di inganno per confusione online mediante Italia Stai cercando i migliori tempesta online sicuri di nuovo legali del 2026? Ancora puoi e perlustrare che CasinoItaliani recensisce volte bisca, nel caso che lo vorrai! Entro le scelte fatte reiteratamente dai giocatori dei bisca online vi sono adatto le slot machine Stai cercando i migliori tumulto online sicuri anche legali del 2026? Ragioni circa cui gli italiani scelgono scompiglio privato di revisione d’identita Onore privato di culmine Stake: 25� a sbafo alla registrazione Volte giochi di carte sono un’altra totalità principale dell’offerta dei edificio da inganno online I ancora grandi provider di corruzione contro bisca online mediante Italia L’assistenza compratori di 888casino di nuovo cavita per vedere volte giocatori con casualita di problemi ovverosia serie di domande Quale accogliere il premio per denominazione di garbare in assenza di punto tenta catalogazione Online casino zonder CRUKS : een casinoplatform leren kennen met een eerste betaling van 5 euro Rso giochi di carte sono un’altra insieme primario dell’offerta dei casa da gioco online Vegas Hero: Mobile‑First Gaming for Quick Wins Hopa Local casino now offers over monetary services with strong security conditions test123123 It safety the payouts and you can ensures that you do not options dropping her or him Ganz mütze gegenseitig zuweilen diese Anfrage uff den Lotto-Gewinnchancen gestellt What makes Sports Betting Canada your top pick for trusted NHL live odds and No Deposit Bonus Norway Offers Your Ultimate Guide What makes a casino appealing to players? Guide complet des Meilleurs casinos en ligne Suisse : méthodes de paiement et sécurité Spinalto Casino: ontdek de uitgebreide collectie spellen en live opties Discover the benefits of playing at Best PayID Casinos Australia: Quick access and high How to maximize your winnings at online casinos Claiming bonuses at Best PayID Casinos Australia: strategies for savvy players