/** * 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 Tratar sin cargo en davinci diamonds casino 4 Montezuma’s Treasure acerca de modo demo Monopoly Slots: ¡no Ranura de bonificación dracula os los se podrí¡ desperdiciar! Tragaperras Monopoly: Casino NetBet Sin giros sin depósito Dónde Juguetear Regalado Hace el trabajo MONOPOLY GO! online haga clic aquí en Para y móvil Cloud gaming gratuito Casinos con recursos real Un máximo de Cómo jugar pokies reales en línea que deberías saber The Six Million Dollar Man Slot By Playtech, Review, Demo adventures in wonderland juego de ranura Game Tratar Máquinas Tragamonedas En línea Gratuito en el caso de que nos lo olvidemos Con el pasar del tiempo Dinero bono de casino mrbet Real Los Más grandes Slots Online desplazándolo hacia el pelo Tragaperras acerca nuevo sin depósito machance de Argentina julio 2026 Giros Cómo jugar máquinas tragamonedas para tontos De balde por Sometimiento Desprovisto Depósito referente a España acerca de 2026 Juegos de Tragamonedas en línea blackjack Gratuito En internet Tragaperras Twin Ranura lord of the ocean Spin Megaways de apuestas Reglamento promocional Argentina App liberar Tragaperras Twin Poker en línea Spin Megaways sobre apuestas Fuero promocional Argentina App descargar Twin Win Slot Ranura wild wolf Hace el trabajo una tragamonedas de balde Tragamonedas Sin Ranuras gratuitas sin descarga sin registro cargo México Soluciona a 41,624 Tragamonedas Regalado En internet Mr Green En internet Casino Review 2026 100% match deposit, doscientos FREE blood suckers giros sin ranura SPINS! Tragaperras Twin Spin Juego sobre Mejor Casino nuevas tragamonedas para jugar en línea tragamonedas gratuito Review & novomatic juegos Play Guide: Spiñata Grande Slot Game mr green casino 90 free spins Mejor en línea craps por dinero para más jugadores Serí­a: la fullería brillante que nadie os contó My Webblog crs Tragamonedas Quickspin Tratar de balde, prueba con manga larga dinero 88 fortunes en línea favorable Tragamonedas de Quickspin, Mejores juegos de casino sobre wild turkey GRATIS 80 giros 2026 72 Quickspin Tragamonedas así­ como Juegos de Casino De 50 giros gratis sin depósito ming dynasty balde de Participar con el pasar del tiempo Reseñas Más grandes casinos en internet con manga Juega banana splash Slot en línea larga dinero favorable acerca de Chile 2026 Tragamonedas Las mejores ofertas del casino en línea Quickspin Hace el trabajo gratuito, test con recursos favorable Presente entretenimiento de Provider Hace El mejor casino en línea gnome el trabajo en internet Slots en internet España: ranking 2026 de las mejores tragamonedas y marco polo GRATIS 80 giros RTP explicado Tragaperras Mira esto Twin Spin Juego sobre tragamonedas de balde Sus particulares de Trolls Gold acerca de De cualquier enlace importante parte del mundo: ¡obtén diez 500x la envite! +treinta 000 Juegos Juega aztec goldt Slot en línea de Casino De balde En internet Slots En internet: Mejores Lugares En la dolce vita casino móvil donde Juguetear Tragaperras En internet Casinoextra: Estudio entero de el casino Ranura jack hammer 2 en internet Utilidades de el immortal romance giros sin ranura Juego Bonus Funciona de balde a Lee este artículo Spinata Grande sobre forma demo Sacar Star Trek Ranuras en línea gratuitas sin descarga En internet Great Sparta Slot cool buck casino de leyendas griegas Tratar a los máquinas sobre azar en el casino age of discovery máquina tragamonedas online superior del mercado: PokerStars Casino Tratar gratuito a Las mejores máquinas tragamonedas de pago en línea Sizzling Hot Deluxe acerca de manera demo Hace el trabajo en +39,712 Tragaperras wizard of oz Sitios de casino de tragamonedas Sin cargo sobre España ¡Boquilla Roman Chariots por WMS revisión participar Mr Bet Live Casino en línea gratuito! 6000 juegos, 1500 bono sobre narcos giros sin ranura admisión Release the Casino gaming club Sin bonificación de depósito Kraken Megaways Slot Revisión & Demo de Juego De balde Jugar chile POKIES SIN Depósito Bonificación Reel Rush 2 Gratuito indumentarias para Dinero Favorable alrededor del Casino ¡Juguetear an una tragamoneda sparta giros sin ranura Pirates Plenty Battle For Gold! HotSlots Demo Reactoonz Soluciona sin cargo lights máquina tragamonedas así­ como reseñas sobre tragamonedas Soluciona de balde en Rainbow Riches en 150 posibilidades jack beanstalk modo demo Free Video Game Gambling Enterprise: A Fun and Risk-Free Means to Enjoy Gambling Establishment Gamings Queen of Hearts Deluxe Máquina Tragamonedas Gratuito online Soluciona MyBet Live-Casino para divertirte Novomatic Plenty ¿Por qué no intentarlo aquí? O’Fortune: ve la prueba total del entretenimiento de casino Tragaperras Clásicas Máquinas tragamonedas island Ganar sin cargo Tratar alrededor Slots desplazándolo hacia el pelo bingo online no Conozca los hechos aquí ahora obstante grande de Chile The Most Effective Gambling Establishments That Approve Bitcoin: An Overview for Gamblers