/** * 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 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 Thor Fortune – online kasino v České republice: kompletní průvodce Spinssino online casino bonusgids: alles over bonussen voor Belgische spelers Sierra Casino – online kasino app a mobilní průvodce Καζίνο Sites Ο Απόλυτος Οδηγός για Online Καζίνο στην Ελλάδα Proč byste měli zvážit online kasino SpinReelz – Passos de registo no casino online Thor Fortune: guía de app y móvil para el online casino en España Coronavirus disease 2019 De evolutie van casino spellen door de jaren heen Scoprire strategie vincenti nei casinò online What Online Gambling Enterprises Approve PayPal: A Comprehensive Guide Beste Online Casinos ohne Verifizierung 2026: sichere Zahlungsmethoden und schnelle The Complete Guide to Slot Variance A beginner’s guide to the best sports betting sites in the UK: start your Casino online CZ – náš výběr nejlépe hodnocených českých kasin 1Win en Argentina – aplicación móvil Gates of Olympus – Pragmatic Play Slot Kasyno online Vulkan Vegas – Dostęp mobilny 1Win Giriş Türkiye’de Online Casino Beste Online Casinos ohne Limit 2026: Die besten Strategien für Anfänger im Casino Comprehending Free ESA Letters Online: A Comprehensive Overview