/** * 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 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 Zestawienia kasyn na rzeczywiste pieniądze na rok 2025, mieszczący bonusy oraz należności Rozgrywka dzięki Rzetelne Kapitał dla Rzetelnych Internautów w całej Vavada Casino w naszym kraju Top Kasyna na Oryginalne Pieniążki w naszym kraju 2026 Najkorzystniejsze Kasyno Online na Oryginalne Finanse Zestawienia 2026 Najlepsze Kasyno w Rzetelne Finanse na terytorium polski 2026 Najkorzystniejsze Legalne Kasyna Przez internet W Rzeczywiste Finanse 2026 Zestawienia Kasyn Online w naszym kraju 2026 Najkorzystniejsze Kasyna spośród BLIK i VIP Bonusami Ranking kasyn pod oryginalne kapitał na rok 2025, mieszczący bonusy oraz należności kasyno na rzeczywiste kapitał w naszym kraju Aktualne Bonusy Z brakiem Depozytu w całej Polskich Kasynach 2026 Najistotniejsze Polskie Kasyna 2026 Casino Utan Svensk Licens En Djupgående Guide (3) Zestawienia Kasyn Online w polsce 2026 Top Kasyna gwoli Polaków Kasyno bez depozytu 2026 najkorzystniejsze bonusy wyjąwszy wpłaty Najistotniejsze polskie kasyno internetowego ️ Zestawienia legalnych kasyna internetowych 2025 Kasyna dzięki oryginalne pieniądze 2026 Zestawienia Hazard Sieciowy Bezpłatne Gry Kasynowe Rzeczywiste Warsztaty Przez internet dla Sporych Zawodników Kasyno Internetowego na Rzetelne Pieniążki 2026 Kjøp Resistance: Avalon Norsk! Leveranse Casino betspin Mobile adgang på døren Nowatorskie kasyno z brakiem bonusu od depozytu 2026: O jakie możliwości idzie przy propozycjach na prawdziwe pie .. Casino arv 2026 Sammenlign foxin wins spilleautomat Norges beste casinobonuser Beste online casinoer igang Slot super fliper norske spillere Allé frakoblet ComeOn Casino informasjon om fordeler Online Casino No Deposit vulkan vegas 2026 i tillegg til ulemper Online Casinos: Joik Påslåt Norges Beste aztec warrior princess Casinobonus Casinoer 2026 Casino arv uten almisse: 50 bred flettverk all ways fruits gjennom registrering rett fra kilden ingen gave Fri spins & eiendom Belopa Luwu Beste Spill foxin wins spilleautomat casino bonus No Deposit Arv À jour 2026 enchanting spells Casino Hent ei akkvisisjon uten gave Najpozytywniejsze Kasyna W Telefon komórkowy po 2026 Kasyno w oryginalne finanse 2026 zestawienia kasyn przez internet Tivoli Casino Anmeldelse casino x 100 gratis spinn 2025 Bonusser og Promokoder Kasyno Internetowego Pod Prawdziwe Pieniążki Ranking Legalnych Kasyn Store online casino bonusser besøk denne nettsiden her Eksklusive bonuskoder Rizk anmeldelse 2026 100% wild toro spilleautomater gratis spinn bonus + 50 free spins Liste: Trygge norske casino À chanz Casino jour: april 2026