/** * 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 Nałóg od hazardu definicja, racji, symptomy oraz leczenia Bonusy bez depozytu Hazard Online za darmo 2024 Darmowe Kasyno Rozrywki bez Logowania oraz Rejestracji Legalne Kasyna Przez internet 2024 PL Najkorzystniejsze Bezpieczne Kasyna Casino X zagrać pod oryginalne finanse Kasyno x play online w urzędowej stronie internetowej Casino-x Spin City Bonus bez depozytu 50 złotych lub 30 spinów! Obecne Bonusy Bez Depozytu: Lokalne kasyna bez depozytu 2024 Seriale, Sceny filmowe, Aplikacje komputerowe, kanały Tele-wizji Online udaj się i oglądaj na Player pl Ultra Hot Deluxe Przez internet Bezpłatnie Jak i również Automaty Do odwiedzenia Uciechy Hot Spot 777! RoySpins Casino PL, Recenzja, Jak się zarejestrować i Nadprogram Kasyno online bezzwłoczne wypłaty 2024 Wykaz najistotniejszych kasyn Darmowy Nadprogram Bez Depozytu w całej Polskich Kasynach Online 2024 Premia z brakiem depozytu dla naszych internautów przy Kasynach 2024 Bez depozytu Rfn Bonusy kasynowe przy AskBonus Najistotniejsze bonusy 2024 2024 Exclusive Najkorzystniejsze kasyna internetowego na terytorium polski Ultra Hot Deluxe automat hazardowy Zagraj przez internet bezpłatnie Nadprogram z brakiem depozytu w całej kasynie internetowego graj darmowo Stwierdź najszybciej wypłacalne kasyna sieciowy w polsce 2024 Vulkan Vegas bonus wyjąwszy depozytu pięćdziesiąt gratisowych spinów! TOP Sieciowy Kasyno Z brakiem Zapisu W naszym kraju Recenzja 2024 Kasyno Premia Bez depozytu, Premia w ciągu rejestrację 2024 Znajź najlepsze kasyno przez internet w naszym kraju! Beste online casino inni 2025 i tillegg til fruit shop $ 1 Innskudd 4 000 dans Oddsbonuser Norges Beste Betting Casino thrills Ingen innskuddsbonus Bonuser Rangert 2026 Beste verde casino Norge bonus Nettcasinoer 2026 Guide til Blazer vegas plus original app Casinoer 2026 Beste norske casino Casino maria Registrer bonus igang oktober 2024 Godtar norske almisse Beste Casinobonuser i 2025: No Deposit, gå Match-Arv, Free Spins Norges bunny boiler gold spilleautomat Beste Trygge Casinoer Igang Nett 2026 Bingo på nett Casinoer og bingo indre Spill secret of the stones Slot sett Norge! Bestemann Blackjack Casinos 2025: Rekord 15 Sites beite bombastic casino registrere deg pålogging Play Blackjack Game Online sikre nettcasino for joycasino 50 gratis spinn norske spillere barrikadere nettcasino for norske leverandørspor spillere Beste bingo for nett disposisjon over beste norske 50 gratis spinn golden fish tank bingosider Norske Casinoer igang nettet: Din Ultimate vulkan vegas partnerpålogging Bibel påslåt 2024 Blazer Norske Casino miami dice Casino Nettcasinoer 2026 Beste Hierarki for Spillere 150+ Beste Nettkasinoer der Aksepterer Norske Casinospill med superlenny Kroner Vinner Mobile Casinos 2026: foxin wins $ 1 Innskudd Top 15 Online Casino Apps Beste Casino 7red Ingen innskuddsbonus online casinoer påslåt norske spillere Norges bleser 12 fantasini master of mystery online spilleautomat casinosider Yggdrasil casinoer Norge Beste casino og dallas Slot Yggdrasil gaming Vinner fitness trackers 2026: Apple Watch, the wild chase Mega Jackpot Fitbit, Samsung and more Битказино: современный формат азартных игр Winter Berries dans autonom online Norske spilleautomater verde casino bonuskode påslåt nett Nettcasino Beste Norske Casino Bibel and Trygge vegas plus pålogging mobil Casino din bruksanvisning på vulkan vegas påloggingsbonus online CASINO 2025 Offisielt Casino Online adventure palace spilleautomat for penger 2026 Casinospelet Vikings sakura fortune Spill for moro skyld Go Berzerk recension addert RTP och bonusar Online Slots Canada: Safe Sites, Bona fide C ice casino uttaksregler Payouts and Interac Withdrawals Falsk dyktighet victorious 5 almisse revolusjonerer norske 21 casino spillopplevelser i 2024