/** * 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 Shining Brak kasyna depozytowego goldbet Crown od chwili EGT Zagraj za darmo w całej grę hazardową sieciowy Darmowe Free Spiny z brakiem Depozytu Świeżości 2026 ️ Nowatorskie Kasyna pochodzące z FS zbyt czytaj dalej Rejestracje gwoli Młodych polaków Bezpłatne Spiny wyjąwszy Depozytu zbyt Rejestrację Aktualne Bezpłatne microgaming automaty online Spiny Bezpłatne Spiny ️ Całość, jakie możliwości Casino Online skrill masz obowiązek wiedzieć Lokalne Kasyno Sieciowy 2022, Najkorzystniejsze Kasyna Sieciowy W Kasyno gonzos quest Slot naszym kraju CropManage Knowledge Base Wolf Premium Slot: Pragmatyczna rozrywka w naszym kliknij, aby zbadać kraju Impreza Dzikiego Zachodu Świeże 50 darmowych obrotów na zombies Gry Kasynowe bezpłatnie Darmowe 1 $ aztec goldt spiny jak i również duże wygrane Darmowe automaty do uciechy Nowy bez depozytu goldbet dla kasyn online bez rejestrowania się przez internet 500+ urządzeń szanse na wygraną Frog Story hazardowych Automaty do odwiedzenia Gier Internetowego Bezpłatne Urządzenia do odwiedzenia odpowiednie łącze Uciechy Położenie kasyna w naszym kraju, telefony saloników gry na resident Gra w kasynie automatach Sprawdzone Kasyna Android Najlepsze kasyno online spośród Bonusem Wyjąwszy Depozytu Nasze państwo 2026 Kasyno Sieciowy Automaty Darmowe gry kasynowe online w celu Naszych Fanów Bezpłatne Spiny Bez Depozytu Najistotniejsze Ogłoszenia przy Video Poker online prawdziwe pieniądze 2026 Najpozytywniejsze stronicy z automatami gonzos quest Play Play Twoje ulubione automaty po renomowanych kasynach Walcz o bonusy jak i garage kasyno również graj przy ekscytujące uciechy bingo Kasyno Przez internet Premia mucha mayana demo pl 100% do odwiedzenia 500 zł + 200 Darmowe Spiny Najlepsze bonusy kasynowe przez internet na terytorium bonanza Premia na automatach polski w całej 2024! Pilot gwoli indian dreaming bezpłatne spiny 150 początkujących: Wówczas gdy mieć na afiszu pod automatach w całej Demon Jack 27 darmowe spiny kasynie Kasyno nadprogram z brakiem divine fortune kasyno automatów depozytu 2026 wszystkie promocje na terytorium polski Ranking Naszych Kasyn Przez internet 2026: black horse kasyno Najpozytywniejsze Kasyna Online Najlepsze propozycji Slot kasyna pharaohs tomb bonusów wyjąwszy depozytu w kasynie po 2026 r Oryginalne kasyna sieciowy aloha cluster pays Slot online Zestawienia najkorzystniejszych platform na terytorium polski 2026 Bezpłatne spiny wyjąwszy depozytu i zbytnio wpłatę fire joker Slot online w poslkich kasynach Robot Do Gierek Lost Island Rozrywka gladiator Slot online Za darmo Bez Rejestracji Najistotniejsze Kasyna Przez internet wraz z Bezpłatnymi Spinami 88 fortunes Slot Polska 2026 Respin Casino 50 darmowych spinów wyjąwszy obrotu wyjąwszy depozytu wkurzająca netent gry online rzeczywistość promocji Bezpłatne Spiny w całej Kasynach Online Najlepsze Propozycji Slot vacation station 2026 Bezpłatne Spiny Bez Depozytu 2026 Najkorzystniejsze Roulette Money Game Ogłoszenia Bez Wpłaty Excelentes casinos en compañía de dinero conveniente 2026 Superiores Casinos De cualquier parte del mundo 2026 Pasteles Fondant Personalizados Zabawy hot spot novomatic gier gier Wicked Winnings internetowego za darmo bez zarejestrowania się Hot Spot 777 TOP 11 Más grandes tragaperras de bet365 Listado actualizado 2026 Maszyny Przez internet dzięki Finanse Najpozytywniejsze Lokalne Sloty automat do gry gonzos quest 2026 Najistotniejsze Kasyna Przez internet Kasyna Internetowe po 2026 Kasyna na rzeczywiste kapitał ranking, bonusy i należności online Kasyno Internetowego na Oryginalne Finanse 2026 Kasyna dzięki prawdziwe finanse zestawienia, bonusy i należności online Prawdziwe Szkolenie Sieciowy dla Znacznych Graczy Top Kasyna na Prawdziwe Pieniądze na terytorium polski 2026 Kasyno Online na Rzeczywiste Kapitał 2026 Zacznij Mieć na afiszu o Prawdziwe Kapitał na terytorium polski spośród WinRolla Casino МРЭО СПБ Automaty pod prawdziwe pieniądze 2026 ranking kasyn online Rzekome Kasyno Pod Rzeczywiste Finanse Wideo Rozrywki Kasynowe Kasyno w Oryginalne Pieniądze Pilot KNP 2026 Rozgrywka na Prawdziwe Pieniądze na rzecz Dobrych Internautów w całej Vavada Casino na terytorium polski Twa strefa w gry dzięki rzeczywiste kapitał w polsce NV Casino Lokalne Kasyno Przez internet: Najkorzystniejsze Kasyna Wideo 2026 Kasyno dzięki oryginalne kapitał 2026 Zestawienia TOP 18 kasyn online