/** * 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 Navigating the world of high-stakes gambling Albo sa jakies Bylo Szuflada Kasyno Blik Wybrane Za pośrednictwem Autorow Polskiekasynos? Zaloguj się i Zgarnij czterysta Pln Bonusu Uciechy kasynowe Nasz kraj 2026 TOP 18 kasyn internetowego Bezpłatne Gry hazardowe w naszym kraju Perfekcyjny Rozrywki Urządzenia darmowo Maszyny internetowego przy XON Bet: Automaty do uciechy w kasynie Najlepsze Kasyna do Uciechy w całej Automaty Online- Gatunki, wytyczne, bonusy Najlepsze Kasyna Internetowego w polsce 2026 Bezpłatne Automaty ️ Zagraj w całej Darmowe Automaty Sieciowy Automaty Internetowego Darmowo Darmowe Uciechy Sloty Ustawowe kasyna internetowego na terytorium polski przyczynki i regulacje Najkorzystniejsze Automaty Przez internet w polsce 2026 TOP 5 lokalnych kasyn sieciowy Najkorzystniejsze kasyno wideo 2026 na terytorium polski Ranking Najlepszych Kasyn Sieciowy Najistotniejsze Kasyno Sieciowy w polsce 2026 Kasyno internetowego 2025 zestawienia najkorzystniejszych salonów gier Lokalne Kasyna Internetowe Najlepsze Polskie Kasyna Online ᐈ Lipiec 2026 ᐈ Kasyno Analyzer Najpozytywniejsze kasyna online w polsce 2026 Zestawienia Kasyn 2026 Najkorzystniejsze Kasyna Online Nasze państwo 2026 Ranking Kasyn Najkorzystniejsze Legalne Kasyna Internetowego na terytorium polski 2026 Legalne Kasyna Internetowego na terytorium polski Wykaz 2026 Vavada Casino Przez internet ⭐️ Zaloguj się w całej Vavada Kasyno jak i również Odbierz Nadprogram dziesięciu najlepszych kasyn na terytorium polski Mostbet Casino PL⭐️Oficjalna portal w polsce⭐️2000zł 220 FS Legalne Kasyna Przez internet na terytorium polski 2026 Zestawienia TOP pięć lokalnych kasyn internetowego Najlepsze kasyno internetowe 2026 w polsce Bezpłatne hazard: Zagraj w całej Kasyno Zabawy na terytorium polski Najlepsze kasyna online na terytorium polski 2026 ️ Top dziesięć Kasyno sieciowy 2025 ranking najkorzystniejszych salonów gierek Ustawowe kasyno przez internet 2026 z KNP: Licencje, lista i zasady rozrywki Wypłacalne kasyna online na terytorium polski wraz z małym depozytem morzem 3000 konsol, RTP i wypłaty krypto Ustawowe Kasyna Online na terytorium polski 2026 Ranking Ranking Kasyn Sieciowy 2025 Które to Kasyno Online wybrać? Najkorzystniejsze kasyno internetowego w naszym kraju 2026 Ranking naszych kasyn Poglądy graczy o kasynach ️️ Komentarze faktycznych internautów o polskich kasynach sieciowy Ustawowe Kasyna Przez internet na terytorium polski Spis 2026 Krajowe kasyno online opinie 2026 TOP 18 kasyn Kasyna Online Przelew Blik: Jak funkcjonują koszty? מועדון צרכנות Club 365 Legalne Krajowe Kasyno Internetowego Blik Kiedy rozpocząć grać pochodzące z Blik? Ohel Sarah Przechowanie Blik przy Kasynie Przez internet Przewodnik Krok po kroku Kasyno internetowego BLIK 2026 najpozytywniejsze kasyna z BLIK Najistotniejsze Kasyna Przez internet na terytorium polski 2026 Ustawowe Kasyna Sieciowy Dzięki Rzeczywiste Kapitał w polsce Lokalne Kasyno Online ️ Najpozytywniejsze Kasyna Wideo 2026 Kasyno przez internet na terytorium polski Najlepsze kasyna online 2026 Kasyno Płatność SMS 2026: Ranking oraz Metody Depozytu Kasyno depozyt SMS 2026 transfer za pośrednictwem telefon komórkowy jak i również ranking