/** * 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 Jumanji cztery dzięki źródłowym fotce Atrakcyjna obsługa wraca! Immortal Slot kasyna deal or w istocie deal Romance robot hazardowy Zagraj przez sieć za darmo Ultra Hot Deluxe slot od momentu dostawcy Novomatic Premie jak i również ogłoszenia Dolphins Pearl Deluxe Novoline Betboro Erreichbar Spielsaal Spiele Bezpłatne spiny z brakiem depozytu oraz za wpłatę przy poslkich kasynach Habanero Producent Gierek Hazardowych Najlepszy Producent Slotów Sieciowy Dolphin’s Pearl Deluxe Slot Play This Free Novomatic Game Gry Maszynowe Pod Pieniadze Najwyżej Kalkulowane Kasyna Internetowego przy 2019z hurtownia paliw budowlanych Einzahlungsbonus Erster Maklercourtage qua Einzahlung next year Bezpłatne Hazard: Zagraj w całej Kasynowe Gry hazardowe za darmo Had been ist und bleibt diese Wayback Machine? +10 praktische Anwendungen Free Spins wyjąwszy depozytu zbytnio rejestrację w całej kasynach online Bezpłatne Spiny bez Depozytu zbytnio crazy monkey Zabawa po automatach Rejestrację 2026 Free Spiny Beste Echtgeld Angeschlossen Casinos in Teutonia 2026 Bezpłatne Kody do odwiedzenia Kasyn Z brakiem Depozytu 2026 Kody Promocyjne na GHZD Darmowe Spiny po Kasynach 2025 Ranking Najistotniejszych Ofert Verbunden Spielbank Prämie: Beste Angebote im August 2026 pięćdziesięciu bezpłatnych spinów wyjąwszy depozytu 2026 Beste Echtgeld Casinos 2026: Verbunden Spielotheken qua Echtgeld Mostbet Casino Polska Mostbet Premia Bez Depozytu 2026 Spielbank Maklercourtage exklusive Einzahlung 2026 Beste No Abschlagzahlung Boni Oficjalnie graj w automatach Cosmolot Oficjalne Kasyno na terytorium polski 2026 Diamond Dogs Wikipedia Nadprogram bez Depozytu w całej kasyno dla Polaków Top reklamy 2026 Dazzling Diamonds bei Novoline gebührenfrei aufführen Bezpłatne spiny Free spiny wyjąwszy depozytu jak i również wraz z bonusami Czeskie Kasyna Internetowego Najkorzystniejsze Propozycje w całej 2026 Kod promocji wyjąwszy depozytu 2026 w Lemon Casino: najlepsze darmowe spiny jak i również kody bonusowe Darmowe coyote moon Slot Big Win spiny przy kasynach internetowego dzięki terytorium własny Sizzling Hot Slot Sieciowy pod prawdziwe pieniadze na terytorium polski Najpozytywniejsze Kasyna Online wraz z Darmowymi Spinami Polska 2026 Darmowe Automaty 777 Graj w Zabawy Demo Online dzięki SlotsUp pięćdziesiąt bezpłatnych spinów bez depozytu 2026 Aztec Secrets za darmo Zagraj Demo w SlotsUp Najwyższa Spis Kasyn Sieciowy Gry hazardowe pod oryginalne pieniążki Automaty Internetowego Bezpłatnie Darmowe Zabawy Sloty Automaty Do Gier Przez internet Graj Darmowo w całej kasynach przez internet Automaty Przez internet Darmowo Darmowe Zabawy Sloty Sizzling Hot po relacji profesjonalistów Polskie Casino Bezpłatne Automaty Przez internet: Rozpocznij Wystawiać Jak i również Wygrywaj! Odsetki przy niemalże pracy w całej 2025 r : stanie się automatyzm naliczania jak i również należności Infor.pl W całej Bet-at-home dziś jest 15 gratisowych spinów na grę BloodSuckers j .. @kibiklops :: Wykop.pl Vulkan Vegas Recenzje 2025 Prawda na temat Bonusach i Wypłatach Slot pojedynków karnych gdy wygrać lepsze i zagrać online Bgaming pięćdziesięciu złotych z brakiem depozytu za rejestrację 2026 Zestawienia Kasyn 10 Golden Dragon pewien USD depozytu Euro bez Depozytu Kasyno 2025, Najpozytywniejsze Bezpłatne Casino wraz z 10-ciu EUR w ciągu samą rejestrację Gry 777 za darmo w kasyno Sloty 7777 siódemki online Kiedy zyskać dzięki automatach internetowego Pełny przewodnik Ultra Hot slot online Graj darmowo, wydanie demo bez zarejestrowania się