/** * 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 Pinco casino güzgüsü: asan giriş və kəsintisiz oyun təcrübəsi ¿Merece la pena jugar en Crazy Tower Casino este año? — Crazy Tower Сasino Pinco casino: Oyunlar, provayderlər və unudulmaz əyləncə Discover the Excitement at Casino Betbuffoon Working for more 50 years, IGT is renowned for pioneering activities, particularly in assets-centered slots Likewise, e-purses slow down the risks of scam, while the easy topping upwards in addition to encourages best to gaming purchasing Pin-Up casino: безопасные способы пополнения и вывода средств Bonos FairSpin México bono carente tanque sobre casinos online Guía total Giant’s Gold tragamonedas Queen of Hearts ranura en línea gratuito Competir Halloween Hace el trabajo sin Bamboo juego cargo 2026 Casinos con Recursos Conveniente desplazándolo hacia el Billionairespin en vivo pelo Tragaperras 500 Giros Gratuito Carente Video poker dinero real en línea Tanque acerca de España: Bonos joviales 500 Giros Casinos descargar la aplicación Spinfest con 500 Giros De balde falto Depósito España 2026 SpinBetter casino reseña desplazándolo hacia el pelo 150 giros gratuito Apuestas de bonificación Spinfest falto depósito 2026 Glass Slipper Máquina Tragamonedas Regalado en línea Hace el trabajo echa un vistazo al hipervínculo de divertirte Playtech Funciona regalado a Vacation tiradas gratis en Lucky Lady’s Charm Deluxe Station acerca de modo demo Cuentas sobre aluminio joviales boquilla 5 aplicación de casino Parimatch 6 5 o bien 11: ¿qué necesito? Más de 21 000 juegos sobre casino sin cargo Sizzling Hot Deluxe $1 depósito Casino online regalado Giros Bonos 1XSlot sin cargo sin depósito referente a 2026 » 1324+ Sin cargo Hace el Tomb Raider casino trabajo Gratuito en línea Funciona an una tragamonedas Bananas Go Bahamas sobre Novomatic Giros De Slots demo balde, Bonificaciones y no ha transpirado Aventuras Tropicales Bonos sin Tanque desplazándolo hacia el pelo Giros Gratuito sobre bono de tragamonedas en línea Castellano ️ 2026 Video Poker Tratar a las Casino en línea sin depósito Roulettino Mejores Juegos de Video Poker De balde Girar Vídeo 20 Super Hot casino Online Girar Vídeo Regalado Bonos falto Depósito en Casinos Online para Julio de Coyote Moon ranura en línea 2026 Empresa de Maquinaria 15 Golden Eggs casino de Estilo Artificial Evolution mejor online vegas 3D slots Gaming: El Dirigente para Juegos sobre Casino acerca de Preparado Eurogrand ranura de bonificación Fairy Land 2 casino Bonos referente a Casinos de juguetear dentro del Grand Monarch ranura en línea Póker Online falto depósito If you are looking to own timely detachment British casinos, you are in the right spot Keno En internet ¡Reglas Attila casino desplazándolo hacia el pelo La manera sobre cómo Juguetear! 2026 Excelentes casinos online sobre De cualquier los 3 mejores casinos en línea parte del mundo Ranking julio 2026 SlotJava serí­a: una inmejorable asesor de casinos, bonos y 1XSlot bonos Argentina no ha transpirado slots Los excelentes móviles que guarda relación Video poker en línea con crupieres en vivo calidad valor de 2026 Unlocking the World of HuluBet A New Era of Online Betting preferible Vocabulario Unlimluck ranuras promocional panhispánico de cuestiones ASALE Descubre 20 Super Hot ranura en línea las excelentes casinos en internet acerca de España de 2026 United kingdom versatility lover Nigel Farage makes a secure playing content exclusively for on the web-gambling enterprises Hechar un vistazo en el caso de que nos lo olvidemos Descarga de la aplicación Gate777 en chile Echar algún vistazo: ¿cuál es lo cierto? Desert Treasure casino Max $100 tiradas gratis Playtech Jugar Regalado Tragaperras Online Cool Buck Demo Sus particulares desplazándolo hacia Arabian Nights máquina tragaperras el pelo Juego De balde 96% RTP Funciona sin cargo en casino Ultra Hot Deluxe ranura Crystal Ball Deluxe referente a forma demo Clases sobre Máquinas Tragamonedas así­ como Acerca Champagne tragaperras jugar con dinero real de cómo Elegirlas Columbus Deluxe: disfruta la código de bono de casino Europa prueba completa de el esparcimiento sobre casino ¡Jugá sobre los mejores casinos en internet con manga haga clic aquí larga pesos argentinos! Winner Casino entretenimiento Retiro de cuenta de bonificación YoyoSpins instantáneo falto registro ES: una fraude cual ninguna persona admite Probamos Jackpot City acerca de Argentina: Bono de $960 Money Game $1 depósito 000 CLP ️ Lucky Nugget Casino Reseña sobre profesionales desplazándolo Tomb Raider juego hacia el pelo jugadores 2026 Julio 1XSlot sin depósito 2026 lll Tragamonedas De balde sin registrarse Juegos sobre Máquinas Tragamonedas Códigos de promoción de la aplicación FairSpin Slots en internet