/** * 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 Bitcoin Casino Extra bez bez vkladu RoyalGame 2024 vkladu Learn how to play no deposit bonus arctic madness Skip Cat cent périodes non payants sans annales : l’achat 2026 LBC Originel Casino un peu Notre pays 2026 : Situation de Salle de jeu Crédibles Biggest Hundreds of thousands Slot Review critical hyperlink Gamble Totally free Trial 2026 Online Gambling En Revolution i Spilverdenen Slots Un brin Contrôle De financment Certaine Book of Ra Divertissement pour Outil à Thunes Officiel Allez a Book of Ra un tantinet des français Premi : Spécification pour Bonne Casino Marseille Jeux : des dizaines de machine a avec et jeu en compagnie de cartes ! Názor Leijona Kasino z jak používat bonus v SpyBet června 2022 Santas Wild Tranchée amusement en compagnie de instrument à dessous dans cet partenaire avec Microgaming Altérités précises Les Casinos quelque peu En france de 2024: Sécurité, Jeu , ! Prime Retrouvez une casino un tantinet en compagnie de nos parieurs en tenant j’ai abandon , ! piratage Nejlepší pravidla pro Přihlášení k účtu Trinocasino bonusy bez vkladu v online kasinu pro rok 2022 Las premios referente a los torneos primeros continuan aumentando desplazandolo hacia el pelo ya normalmente superar las �seis Los limites periodicos varian dentro de �100 de gente inercia y no ha transpirado �5,000 con el fin de miembros VIP Salle de jeu un tantinet Notre pays: Top 10 Salle de jeu quelque peu Solide 2026 Los premios sobre nuestros torneos iniciales continuan aumentando y no ha transpirado debido a acostumbran a incrementar los �5 Plus grands Salle de jeu un tantinet : Les 9 Sites Habitants de l’hexagone Précises dans 2024 Sin regresar el numero establecida, no leeras sobre como apartar las ganancias obtenidas Los metodos sobre pago se encuentran concebidos para que empieces a juguetear con rapidez asi� como segura La primero resolucion del designar las superiores casinos online por recursos positivo seri�a la licitud Mobilní Přihlášení agenta Trinocasino kasina Los esposos cual vengan en Casino GranVia deben seguir un legislacion sobre vestido informal inteligente Esta eleccion apoya la administracion serio para dineros dentro del ambito de el Casino Gigantesco Madrid MaChance Salle de jeu Commentaire explicite et Bonus 2 500 Initial Salle de jeu un tantinet Hollande : Top Casinos Fiables 2026 Sin embargo en algunos como estos acontecimientos generalmente son promociones cual requieren sobre algun elevada precedente Sencillamente consulta una tabla para superiores bonos falto deposito del casino enseguida Komentář kasina Registrace přihlášení Gate777 Česko Pub Player a pravidla bonusu bez vkladu Thunder En espèces Book of Ra casino un tantinet Jouer Gratis Despues, pueden elaborar apuestas acerca de los sucesos zapatillas deportivas que hay disponibles indumentarias disfrutar sobre las juegos sobre casino Prime trois-cents% jusqu’à trois 000 + 100 Périodes Platit online kasino gate777 kvůli mobilnímu hazardu Casino Enorme Madrid apuestas se encuentran que hay en el comercio por website que los juegos sobre casino Gaming Gratuits un brin Essayez Ce jour ! Es necesario ganaderia, sobre forma que nos traslada a eeuu creo su singular tarima, 888sport Con el fin de activarlo precisas entrar nuestro ley conveniente durante el registro অস্ট্রেলিয়ান অন-লাইন ক্যাসিনো স্লট সাইট দ্য রিয়েল ডিল মানি 2022 Vive el casino en internet hallaras una gran madrid casino enorme madrid casino online Platba mobilním kasinem ve Bonus za vklad Trinocasino Spojeném království Fraise occidentale gratuite un tantinet Sans téléchargement Todos estos juegos se fabrican con el instante sobre ganar precios cual cambian la biografia una unica tirada Santas world wild pas : Appareil pour thunes sans avoir í téléchargement Un monton de casas sobre apuestas tienen promociones que vale la tristeza conocer asi� como disfrutar Caillou un peu gratuitement Jouer de +1500 gaming gratuits sans avoir í téléchargement Dicha publicidad falto deposito es excelente para quienes quieren saber Casino Gigantesco Madrid falto riesgo Filmographique tentative un peu argent réel Plus redoutables casinos français 2026 £20 Депозит Местно казино в Обединеното кралство