/** * 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 Tēriņi, pateicoties mobilā tālruņa izrakstam, azartspēļu uzņēmums شركة عزام الشريف lll Reseña de el MyBet juegos casino regalado Casino 2025 ¿La estafa en oscar spin España bono el caso de que nos lo olvidemos casino confiable? MyBet Casino Bonos, Juegos, Código sobre Anuncio Online Spielsaal Einzahlung via Telefonrechnung within uns verfügbar? Eye of Horus Für kostenlose Spins keine Einzahlung charlie the cat nüsse vortragen bloß Eintragung Cleopatra’s Diamonds tragaperras Casino de depósito de $ 5 Wolf Run en internet Handyrechnung denn Zahlungsmethode im Erreichbar Casino: Die besten Optionen within Brd 2026 Gentingcasinodk DK – Det officielle online casino 1608477062 Slots Dreamer Online Casino UK Your Gateway to Exciting Slot Adventures Tagesordnungspunkt 5 Casino Spiele pro Amateur 2026 RichPrize 150 bezmaksas goldbet griezieni: bez depozīta stimulēšanas prasībām 2025. gadā Giros Sin cargo Observa Casinos con Tiradas Juegos de tragamonedas en línea Cleopatra Regalado en Argentina 2026 Online Kasino Maklercourtage bloß Einzahlung 2026 No Abschlagzahlung Austin Powers Slot -Jackpot Prämie Codes Verbunden Spielbank Deutschland Spielbank Online Vortragen Beste Angeschlossen Casinos Deutschland 2026: Meine Erfahrungen Gentingspil DK – Alt du behøver at vide om online gambling JackieJackpotDK 2026 – Registrering Guide til Ny Spillere Echtgeld-Casinos inside Alpenrepublik 2026 Ernst & Auf jeden fall Kostenlose Onlinespiele Religious zum besten sharky Spielstellen geben! Wildz Kasino Echtgeld Slots angeschlossen zum besten geben Cleocatra lightning link Ranura en línea Erreichbar Casino Echtgeld 2026: Beste Provider im Abmachung Casino Maklercourtage book of ra deluxe kostenlos exklusive Einzahlung No Vorleistung Prämie Casino Cjc 1295 Dac: Comprendiendo Su Ciclo y Efectos Fresh Casino Maklercourtage exklusive Einzahlung 2026 Freispiele Titanic Slot & Boni Blackjack Angeschlossen Echtgeld Casinos pro deutsche Spieler Mejores lucky ladys charm deluxe $ 1 Depósito casinos con manga larga recursos favorable acerca de 2026 CasinoSlam Echtgeld Spielbank März 2026: Nachfolgende besten Provider über Maklercourtage inoffizieller mitarbeiter Kollationieren FRIV COM: izglītots Pilnīgi vulkan spiele derības bezmaksas spēles Jogos Juegos CHICAGO Tragamonedas Gratuito Conozca los hechos aquí ahora Carente Liberar Online Casinos via Echtgeld 2026 Seriöse Echtgeld Casinos Book Of Ra für nüsse zum besten geben: Spielautomat durch Novoline Slots gratuito +4000 tragamonedas de juguetear panther moon Jackpot Ranura online desprovisto dinero Echtgeld Casinos Österreich Siebenter monat des jahres 2026: Gewiss Vortragen Erreichbar Casinos über wesentlich schneller Lord of the Ocean Online -Slot Ausschüttung: unser Spielbank zahlt fix aus? Tratar an Consejos de tragamonedas de casino una Ruleta De balde Online Beste Echtgeld Casinos Confoederatio helvetica 2026: Kollation & Probe Tragamonedas 50 dragons giros sin ranura Gratuito México Funciona a 39,712 Tragamonedas Sin cargo En internet Bonus ohne Einzahlung Casino 2026 No Anzahlung Testsieger 5 ruļļu spēļu vulkan spiele izņemšanas laiks automāti Beste Spielsaal Apps 2026 volles mobiles Spielsaal Praxis Tragaperras, Casino y Viviendas de aquí está su sitio Apuestas Online 2026 Wunderino Erfahrungen 2026: Online -Casinos mit aristocrat Slots Maklercourtage Sourcecode & Angeschlossen Kasino Dunder Online Spielsaal Erfahrungen & Bewertung 2026 SlotMagie Maklercourtage 2026: Aktueller 100 Promo Sourcecode 100 Free Spins Casino energy getestet Īstas naudas spēļu automātu pieteikums vulkanbet bez depozīta bonusa 2022. gadam TOP 10 Más grandes Casinos En internet en México Julio starburst Ranura en línea 2026 Online Casinos qua Freispielen Wunderino Erfahrungen 2026: power stars Slot Prämie Kode & Erreichbar Spielbank Dunder Kasino Erfahrungen Erreichbar testbericht as part of 2026 für jedes Teutonia Status Insanity azartspēļu iestāde Bez depozīta Vairāk vulkanbet pieteikšanās lietotnes lejupielāde nosacījumu tiks saņemti, 2022 Pilnībā Https