/** * 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 Darmowy Nadprogram Wyjąwszy Depozytu w Naszych Kasynach Sieciowy 2024 BLIK Kasyna Przez internet Najlepsze Kasyna Blik na terytorium polski 2024 Casinos vers classe en compagnie de deux$ Déposez deux$ Réceptionnez 105 tours gratis Carte Macao : initiale japonais du jeu d’action Casino un tantinet avec jouer dans argent palpable 2024 Au top dix leurs principaux situation Jeu Experts S’amuser gratis un peu 142 jeu Plus grands Casinos Pour Prime Sans nul Conserve dans 2024 2 méthode simples de encaisser avec la maille de Paypal Yourtopia Jeu De monaie Palpable En compagnie de Jouer Sans avoir í Dilapider Un peu Choix le mieux adapté de jeu gratis pour appareil a sous un brin Jeux en compagnie de bureau non payants 2024 Allez les bons jeu casino Paysafecard : comme lutiliser sur votre casino en courbe ? Périodes Gratis 2024 Principaux Bonus avec Salle de jeu un brin pour Tours Gratis Commentaire Vrai Destin Casino 2024: Gratification Sans avoir í Classe De 35 Instrument Avait Avec Abusives: Jeu Avec Casino Sans nul Téléchargement Caillou Quelque peu : Abroger De L’argent Réel Sur les Salle de jeu Appareil vers Dessous En espèces Connection Dolphins Pearl Gratis dans Greentube Amuser Jeu salle de jeu un brin Casino Bonus à l’exclusion de conserve : Livre les plus redoutables pourboire Acadien CCH Casino Un brin Abusé Élections spielo parages de jeux De Conserve Prime Corse Salle de jeu Appoint Gratuit Sans Annales Découvrez les meilleures articles avec prime dans un pays européen Salle de jeu un peu Éditorialiste & Avis ᐅ 06 leurs 2024 Salle de jeu quelque peu appoint reel en Allemagne, Jeu pour salle de jeu quelque peu monnaie reel francais 2024 +70 Casinos Un peu Vers Bonus À l’exclusion de Classe Chiffres Francais du 2023 Top Casinos Français avec Bonus Siberian Storm instrument à thunes avec mon partenaire pour Igt Désaccord spéciales Top trois Les Casinos Un brin Mastercard 2024 Dépôts Des Loto Gratis +50 Stargames Book Of Ra appareil a sous Jeux Valide Dans Démo Sans nul en car Inscription SGEN-CFDT Alphabétisation Couche Recherche Étatiques Limousin Salle de jeu un peu Interac : Top deux des salle de jeu lequel conclue interac Appareil à thunes Complaisantes sans avoir í téléchargement : 1000+ Jeu avec Casino Non payants Paris parieurs Québec, Canada: 2 meilleurs condition en 7 2024 Instrument À Avec Sans avoir í Téléchargement : Meilleurs Jeu Non payants Top deux Crédibles en france Top Casino un peu 2024 : Bouquin les Plus grands Sites de jeu Bits tours sans frais Emplacement Master Juin 2024 : Les bijoux pour obtenir des free spins chaque jour Machines pour avec désintéressées 2024 : Essayez à deux,000+ jeux un brin Machines à Sous en Ligne en Argent Réel Meilleurs Casinos de Machines à Sous en Ligne de 2022 Totally free Revolves & Award Multipliers Wolf Work at Position 100 percent free Play On-line casino Harbors No Download The Ultimate Guide to Free Spin Casino Sites Discovering the Best Online Gaming Website: An Ultimate Guide Ramses 2 100 percent free Casino slot games On the internet Play Games, Greentube Instantaneous & On the web Cleopatra Position Comment 2026 100 percent free Enjoy Demo Play Thunderstruck Slot Free Revolves No-deposit Acceptance Bonus 50 Free Revolves On the Registration No deposit Southern Africa 2026 Free Spins No deposit Bonuses Most recent Offers July 2026 Observe Free Movies On the web that have Plex Greatest Casinos with one hundred Free Spins No-deposit Incentives within the SA Lord of one’s Sea Position Opinion, 100 percent free Revolves & Mythical Victories Free Slots Zero Download Zero Registration: Free Slot machines Quick Play