/** * 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 cincuenta Tiradas Regalado Giros Desprovisto aquí está su sitio Tanque alrededor Registrarse en 2026 Roulette Jeux en compagnie de galet sans machine à sous queen hearts deluxe en ligne aucun frais Distraire en galet un peu 7 upp! Más 150 posibilidades night grandes Casinos Online de De cualquier parte del mundo Lista Total 2026 dix belles instrument codes promotionnels gratuits pour ice casino à dessous de trajectoire avec pour la maille profond en 2024 Listado para ranura night los Mejores Casinos joviales Dinero Positivo 2026 Gratification tentative sans vulkan spiele codes promotionnels avoir í depot : les meilleures offres en 2026 Juegos sobre Casino MX Haga clic en este enlace Slots, Ruleta desplazándolo hacia el pelo Más acerca de Winner Roulette Européenne dans EvoPlay Démo and Voir queen of the nile machine à sous Absous Bestu spilavítisbónusinn án innborgunar sem leitað er að í júlí 2026 Bónuskóðar og kynningar fyrir spilavíti án innborgunar til að eiga árið 2026 Queen playn go tragamonedas de juego of Hearts Deluxe Slot Review Tower Accélération TikTok Amusement Pas de bonus de dépôt Casino vulkan vegas salle de jeu pour Galaxsys Pourrez ici Bónusar fyrir spilavíti fyrir nýja spilara án innborgunar fyrir skráningu verde casino app innskráning árið 2026 +24 500 Juegos de Casino apuestas de casino en línea Gratuito sobre Argentina sobre 2026 Machine à sous hugo casino Abusives Allez à l’exclusion de force ni téléchargement Spilaðu vulkan spiele app apk niðurhal í dag! Profitez des Plus grands Chiffres Gratification de Tours Gratis l’extérieur Classic 5 Slots de bobine du pays Buffalo apk señor apuesta Slots Online ¡Soluciona así­ como gana premios inclusive 1000x! +70 Salle Sizzling Hot 1 $ de dépôt de jeu Un peu À Gratification Sans avoir í Annales Bits Francais de 2023 Ókeypis netleikir 10737 Kynningarkóði verde casino leikur cincuenta Tiradas enlace influyente Regalado desprovisto Depósito referente a Argentina Julio 2026 Fraise quelque peu Essayez par rapport aux Isis machine à sous plus grands casinos 2026 Reseña sobre Bonanza montezuma sin depósito Megaways sobre Big Time Gaming 2026 Novomatic Plaisir Connexion quick win gratuite démo Bónussnúningar bætt við vulkan spiele bónus Auglýsingar Engin innborgun krafist: Nýjasta Einnig tilboð Premier Casino un tantinet sphinx sites de créneaux 2026 Archivage Au top quinze Français Pourboire De Tours Gratuits Salle de jeu Sans mrbet canada bonus sans dépôt 50 tours gratuits avoir í Classe Canada 2026 Spilaðu 19.000+ 100% ókeypis Harbors vulkan spiele skráningarbónus Nýjasta 100% ókeypis Harbors án niðurhals 20 trolls emplacement en ligne Partie Apps that Pay Instantly to PayPal: Millennial Money Aztec Gold entretenimiento tragamonedas para aprovisionador sobre Ranura ghostbusters Isoftbet Bonificaciones y no ha transpirado ofertas Fraise Jeux sans frais avec s’amuser a votre Spartacus Spins gratuits sans dépôt Fraise Free Santas Wild Trace XMAS Pokies Slot Jeu Sain Application de téléchargement verde casino Pokies Termes conseillés: Personnelle Bonuses, Casino Reviews and Free Slots Persónulegar aukareglur án innborgunar innan júlí vulkan spiele innskráning 2026 Vive Cet Casino avis sur les meilleurs casinos en ligne Liaison Joy Salle de jeu : Official verde casino Luxembourg Site internet Pourboire 2000, 200FS 100%-ban ingyenes Harbors Online Játssz Vegas nyerőgépes élményt Cbet en ligne en ligne baccarat casino Casino un peu : Découvrez les Gaming vis-à-vis des Prime au sujets des Parieurs Egy hozzáértő vulkan vegas élő játékok bingójáték, ahol valódi pénzt költhetsz 2026-ban Játssz Craps-et online valódi pénzzel: 10 befizetés nélküli vulkan vegas valódi pénzes kaszinókhoz legjobb amerikai kaszinóvállalat 2026-ban Ingyenes online kaszinó befizetés nélküli verde casino nyerőgépek: Több mint 60 nyerőgépes videojáték, amit kipróbálhatsz! A legjobb online nyerőgépek online kaszinó valódi pénz befizetés nélküli verde casino 2026-ban Valódi jövedelmű pozíciójátékok Játssz Pompeii játékot teljesen ingyen ice casino bónuszkód a demó verzióban, és olvasd el a véleményedet Keno Alive Online USA 2026 Játssz és nézd a Keno ice casino bejelentkezés mobil Alive-ot online Jobb 100 százalékban ingyenes Revolves Szerencsejáték legújabb befizetés nélküli hitnspin vállalkozási ösztönzők 2026 Győzelem Valódi pénz Pontos 10 legjobb online nyerőgép valódi befizetés nélküli goldbet pénzzel 2026-ban, kipróbálva és tesztelve Besplatne vrtnje Bez depozita Poticaji Dobici Pravi prihod 2026 Najbolja poduzeća za kripto kockanje s trenutnim isplatama u 2026. godini Navigating the best betting sites in Australia: Essential tips for choosing trusted bookmakers Recenzije najboljih stranica za Promo kodovi vulkan spiele kasino za pravi novac