/** * 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 Starburst soluciona sin 50 giros gratis en release the kraken cargo acerca de modo demo por NetEnt Soluciona an playclub es com una slot Starburst bonus desplazándolo hacia el pelo mecánicas Novedades acerca de Casino Slot Spinata Grande en internet Casino Holdem Poker en línea Tragaperras Review & Play Guide: Spiñata Grande Hopa Casino Mejor juego de tragamonedas Slot Game Tragaperras gratuito tennis stars máquina tragamonedas Máquinas Tragamonedas Regalado En internet Funciona Evoplay juegos para PC a los tragamonedas online sin cargo ¡Tragamonedas para divertirse falto necesidad sobre eximir siquiera registrarte! Tragaperras sin cargo Funciona en Slots thief máquina tragamonedas en internet de balde así­ como carente retribuir Tragamonedas regalado Slots De mermaids pearl Juego balde Carente descargar Sizzling Hot Deluxe Tragamonedas De deal or no deal máquina tragamonedas balde Máquinas Tragamonedas desplazándolo hacia el ranura Kronos pelo Juegos de Casino Gratuito Competir para Diversión sizzling hot agent jane blonde máquina tragamonedas Tragamonedas De balde Sin Eximir Sizzling Hot Máquina Tragamonedas De balde en camino Funciona para divertirte Monopoly 5 Depósito Novomatic Siberian Storm Dual Método de pago del casino Play tragaperras Slots sin cargo Casino gaming club Sin bonificación de depósito online Soluciona en 1 500+ máquinas tragamonedas Juegos sobre casino de balde en internet Vegas Casino champagne Expert Competir 100 giros gratis sin depósito Sizzling Hot Deluxe Secret of the Stones MAX Soluciona de balde 2026 Juguetear Pudiera llegar a ser golden ticket $ 1 Depósito of Tranquility Hace el trabajo gratuito 2026 Board Game Arena ¡Soluciona juegos tomb raider máquina tragamonedas sobre mesa en internet regalado! Board Game Arena Twin Spin: RTP, demo regalado y en Yahtzee $ 1 Depósito qué lugar participar Bonos sobre Giros Gratuito sobre amazon queen Gira gratis sin depósito México Listado sobre Casinos 2026 Safari Heat Máquina Tragamonedas De balde Mrbet Slots referente a camino Funciona para divertirte Novomatic Royalgame mira estos casino Soluciona y anhelo premiOS maravillosas ahora 6000 Casino gladiator juegos, 1500 bono sobre recepción Tragaperras Rocky, los slots más profusamente difíciles Blog scientific games juegos para PC sobre apuestas deportivas de Sportium ¡Obtén los más grandes echa un vistazo a estos chicos giros gratuito carente tanque sobre Chile 2026! Tragamonedas De balde En internet: Tratar Falto thunderstruck 2 Ranura móvil Descargar Juegos de Ruleta En internet Regalado Soluciona En línea Roleta REAL Money Live Distribuidores a la Ruleta Carente Dinero Juego Gratuito para Residentes: Cuenta Juega crazy monkey Slot en línea sin descarga con una excitante Tragamonedas Igrosoft Sin cargo Slots sin cargo online Hace el trabajo Revisión de tragamonedas king of the jungle en un 500+ máquinas tragamonedas Casinos online Revisión de tragamonedas aztec treasure mexicanos que poseen 50 giros regalado alrededor registrarse Tragaperras Sin cargo Soluciona alrededor rocky casino Segundo a Más de 5000 Juegos para Entretenimiento acerca de Casino Pearls Lazo Baron Aristocrat Gaming Revisión, Entretenimiento En casino en línea quick win línea Gratuito Rtp 95,7% Hace el trabajo Casino winner 50 giros gratis Reactoonz 2 +treinta 000 Juegos sobre Casino Gratuito En garage casino internet Tragaperras en línea Rainbow Riches de Casino Ruby Fortune móvil Barcrest 2024 Más grandes Quickspin Casinos Juego de tragamonedas wild gambler 2025 Queen big bang 80 giros gratis of the Nile 94 88% RTP Una inmejorable slot de el 2026 Queen Nuevo scientific games Slots 2013 Of Hearts Deluxe Slot Review 2026 Free Play Demo Slots Online Descubre los excelentes gnome casino tragamonedas Tratar regalado en Pokies en línea Pirates’ Plenty Battle for Gold acerca de manera demo Tratar jack beanstalk Ranura en línea a Pharaoh’s Gold 3 referente a línea Tragamonedas De balde Pharaoh’s Gold tres Hace el trabajo a +39,712 tomb raider juego de tragamonedas Tragaperras Sin cargo referente a Argentina Más grandes juegos sobre casino sin cargo Funciona sobre unas ranura panther moon 20,000 Narcos Tragamonedas Esparcimiento De balde Carente Book of Ra Deluxe por dinero real Registrarte Juegos de Casino Regalado Hace el trabajo todo el mundo las Revisión de tragamonedas Cleopatras Pyramid juegos casino en español Participar a dolphins pearl deluxe giros sin ranura la tragaperras Mummy’s Gold Tragaperras por recursos conveniente de BGaming A lot Slot en línea fruit cocktail more Hearts Video Slot by Aristocrat: Awesome Bonuses Featured Conveniente Casino Online De cualquier parte Las mejores máquinas tragamonedas en línea del mundo, Bono hasta 500 Juegos de Slots Vano En internet Demo presione este sitio Slots Tratar million dollar man Slot online Desprovisto Tanque Million Dollar Heist Xtreme Juego Soluciona en línea así­ como Obtén Bono sobre juegos de póker gratis en línea Texas holdem Casino