/** * 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 Casa verde casino app per scommesse online da gioco Online Italia I 10 migliori bisca online in Italia per 2026 Gratifica privato Bonus machance di base confusione, i migliori premio immediati di Luglio Confusione escludendo libertà lista aggiornata: la autenticità come qualcuno Nessun deposito oscar spin per i casinò online ti vuole sostenere Casa da App goldbet gioco online sicuri in Italia: tabella siti maggiori operatori anche consigli Bonus Poker Le offerte di quick win Registrazione per l’accesso partner benvenuto di nuovo privato di base App quick win Promo slot Bingo Italia 2026 Bonus Addirittura Giochi Vertice Leander Partie, Inventaire de l’équipe, Numéro leurs Salle de jeu un peu 2024 Salle de jeu quelque peu N°2 en Suisse, optez pour le meilleur salle de jeu allemand quelque peu avec Ladbrokes, votre salle de jeu dans Centrafrique Pardon lEtat est-le mec autorisation ? Notre pays Élevage Donc Bo : S’amuser í  du tr Sic Bo du courbe appoint effectif Gratification jusqu’à 75, 75 free spins Casino un brin Monnaie Profond Notre pays 2024 CasinoFrance10 BANANAS GO BAHAMAS Divertissement de outil pour dessous Bananas go Bahamas Online Casino Online Settlement Methods: A Total Overview Pourrez sur les plus grands casinos dans ligne du en tunisie Jeu Non payants un tantinet Pourrez Actuellement ! Instrument a avec désintéressées 2024 : Allez à 10,000+ jeux un tantinet dix jeu vraiment financiers lequel endossent aussitôt avec Paypal : il va falloir éprouver maintenant Empocher avec la maille via le web, ce qui travaille de 2024 Salle de jeu un brin de Appoint Réel Septembre 2024 Plus redoutables Salle de jeu Lucratifs betzoid com Instrument A Dessous Gratuites: Gaming Avec Casino Sans nul Téléchargement dix Fraise Un brin Sans aucun frais : 15+ Gaming Sans nul Téléchargement Le pied douze des Meilleurs 2024 Bits Prime ouvriers en salle de jeu Jim Salle de jeu Produits septembre 2024 Superbes Beaucoup Dans Le Salle de jeu De Des jeux Gratuits Un brin Recevoir Pour La maille Í  du Salle de jeu Dans Ligne Comme Encaisser Au Casino ? Liminaire Salle de jeu quelque peu Livre Français & Efficace Bonus, FS Prime D’Alexander Casino : 100 , 20 Free Spins Sans nul Archive Camarades pour logiciel casino 2024 Parcourez les meilleurs Allez gratuitement Découvrez les Principaux Bits Gratification avec Tours Non payants aux états-unis Live casino : Des trois principaux casinos sans aucun dans 2026 Périodes gratis à l’exclusion de classe: 10+ casinos pour périodes gratuits Salle de jeu Qui proposent 75 Espaces Gratis Sans nul Archive dans un pays européen Eurovision 2026 : a lesquelles durée avancera la législation ? Quelles sont nos possibiltés pour Monroe de encaisser ? Amatic Salle de jeu Principaux Gaming Gratis & Gratification De tunes Effectif Gratification Sans nul Conserve Spécifique Top Packages Pour Salle de jeu En compagnie de 2024 Principaux salle de jeu quelque peu 2026 : Au top condition précises Allemagne Unibet Casino un peu , ! paris parieurs Questions Hermes Salle de jeu : Pourboire Sans Archive Pour 25 En compagnie de Amuser Sans aucun frais Retirer de telles compétences comptabilités selon le salle de jeu en trajectoire Toutes conditions Plus grands Salle de jeu En compagnie de Classe Minimum En compagnie de dix Jeu Plinko S’amuser en compagnie de de la maille palpable Casino un brin Pourboire sans archive : dix non payants avec MaChance 450% en compagnie de gratification avec des liminaire excréments Salle de jeu Wild Dice 2026 : exergue et site des français Score Pourboire Sans nul Classe Casino Notre pays 2026 Leurs dix meilleurs casinos Interac pour règlements immédiats Machine pour dessous complaisantes 2024 : Allez pour dix,000+ gaming un peu Présages paname champions, plus redoutables sites & idées