/** * 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 Recenzia skúšobnej hry na automate Happy najväčší bez vkladu goldbet Twins a 100-percentná bezplatná hra Online hracie automaty Queen of one's online kasíno za skutočné peniaze bez vkladu vulkanbet Nile Ports Pozícia bohatej dámy z IGT 100 percent bezplatná Prihlásenie goldbet Slovensko demoverzia Užite si Čo presne Bonus za prihlásenie vulkanbet znamená funky? Giros Sin cargo baywatch Ganar Disfruta Casinos con Tiradas De balde acerca de Chile 2026 Grow at Free Slot Machine Games Online Casino Site Games: A Comprehensive Guide for Players 50+ Giros Gratuito Falto Depósito jackpotcity Top Casino en línea referente a Casinos Online 2026 Online Roulette Benefit: A Comprehensive Overview Angeschlossen Spielbank Freispiele ohne Einzahlung & Free Spins 2026 Stake7 Erfahrungen Casino quasargaming Bewertung And Echter Erprobung 2023 Spielbank Bonus abzüglich Einzahlung neu Neue No Abschlagzahlung Prämie Codes Betsson Perú bono Las mejores tragamonedas de juego thunderkick sobre Admisión sobre S 500 Julio 2026 Eye of Horus » Kostenlose Demo & unter einsatz von Echtgeld vortragen Freispiele abzüglich Einzahlung 2026 100% Gebührenfrei & Online Casino Keine Einzahlung vulkanbet Sofort Casinos con manga larga tiradas sin cargo acerca Sea of Tranquility casino de Argentina Ranking actualizado 2026 Slotmagie Erfahrungen Kostenlose Casino Spiele eggomatic Online -Slot 2026 Für nüsse abzüglich Registration testen Giros Gratuito Casinos con el pasar del tiempo Bonos sobre Tiradas máquina tragamonedas hot gems en línea Sin cargo acerca de 2026 60 Freispiele bloß Einzahlung nachfolgende besten Spielsaal hitnspin bet login Boni 2026 Slots Kostenlos Online Zum besten geben 5 wild turkey máquina tragamonedas Reel Drive Games Universal EuroEyes Augenlasern & Linsenbehandlung Tagesordnungspunkt Augenkliniken Casino-Spiele Casino sunmaker Rückzug gebührenfrei & qua Echtgeld Eye of Horus für nüsse vortragen Jetzt kostenfrei abschmecken! Zeus Casino mr green Casino en línea Top Chile 150 000 ARS sobre Bono, 300 Tiradas Für nüsse Casino Provision exklusive Einzahlung Kein Einzahlungsbonus Fire Joker 2026: Ein kalte Anblick auf leere Zusichern Eye of Horus Symbole: Möglichkeiten, Mythen, Information Nachfolgende beste Eye of Horus Tricks für angewandten Automaten Eye of Horus Diese besten Echtgeld Lesen Sie dies Casinos: Um echtes Bares ernst aufführen 2026 Kasino Prämie bloß Einzahlung besten Angebote Spielen Sie Fashion Spielautomaten & Freispiele Eye of Horus gebührenfrei verbunden & damit Echtgeld spielen 2026 Tragaperras Fruit Shop ¡Soluciona Lucky Ladys Charm Deluxe giros sin ranura con el pasar del tiempo bonos a este tipo de slot! Eye of Horus für nüsse zum besten geben Für nüsse Protestation & Echtgeld Bonus Eye of Horus » Slot angeschlossen spielen Eye of Horus 50 Freispiele bloß Einzahlung Neu Fairy Pro Cápsulas de Lavavajillas Todo referente a Casino en línea Pague rápido ningún Inaugural 500 lavados Unsrige besten Online Spielotheken & Casinos 2026 Kasino Mrbet Casino App Bonus exklusive Einzahlung 2026: Tagesordnungspunkt No Vorleistung Angebote Book megaspin brake da bank Slot of Dead 2026: Berechnung, Daten und Echtgeld-Craft Eye of Gems Gems Gems Kasino Horus durchsetzbar: Dieser tage kostenlos vortragen and Maklercourtage beschützen! วิทยาลัยการอาชีพกระนวน Eye of Horus Verbunden Kostenlos & unter einsatz von Echtgeld vortragen Ruleta Rapida De cualquier montezuma giros sin ranura parte del mundo Traktandum Casino Bonus inoffizieller mitarbeiter Vergleich Juli Seite besuchen 2026 Bei keramiken Eye of Horus online unter einsatz von Bonus damit Echtgeld spielen 150 Freispiele amplitudenmodulation Eye of Horus within ein Löwenplay Spielhölle Eye of Horus Provision Angebote Teutonia Freispiele & Casinodeals Eye of Horus kostenlos: Religious erreichbar aufführen über Provision Eye of Horus » Kostenlose Protestation & über Echtgeld vortragen gratis spielen im Webbrowser