/** * 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 Tiešsaistes kazino ar zemāko depozītu 5 ASV dolāru vulkanbet novirzīšanas bonuss apmērā 2026. gadā Spēlējiet spēlēt tiešraides kazino bez depozīta verde casino Funky Fresh fruit spēļu automātu: viedokļi, kazino, bonusi un videoklipi Lorem ipsum dolor sit amet Analyticky pohled na bonusovy system a podminky vyberu v SpinRain Casino Lorem ipsum dolor sit amet Oplev Live Casino Danske Spil Gratis – Spil og Vind Online Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Bedste PayPal Casinoer til Rigtige Penge Få mest mulig ut av casinobonuser Online Casino Kampagner for Rigtige Penge Maksimer Din Spiloplevelse Exploring Offshore Casinos A Guide for UK Players Bonus nv casino Dar Plată august 2026 23 Oferte de până la 4000+ Rotiri Gratuite Fără Depunere Discover the best pokies available at Online Casino Australia 2026: A gamer’s paradise Rotiri Gratuite Dar nv casino Vărsare secera 2026 45+ Oferte Verificate Online Casino Uden Dansk Licens Alt Du Skal Vide Crystal nv casino Forest slot sieciowy Zagraj bezpłatnie w całej robot bez rejestracji SpinRain Casino e il Futuro dei Giochi con Dealer dal Vivo Guía Completa sobre Casinos con Retiro Inmediato Credit Card Casinos UK The Ultimate Guide dwieście Gratisowych Spinów nv casino do odwiedzenia Odebrania Online Casino Echtgeld: So nutzen Sie den Willkommensbonus 2026 optimal I Spotted nv casino The fresh Killers Gamble A stadium-Rock Reveal Inside A theatre Also it Are Awesome Fast Withdrawal Casino UK 2026: your guide to secure payments and quick cashouts Jackpota nv casino Signal-Up Bonus: eight,500 GC, 2.5 Sc Ghosts Of nv casino Christmas, Bei keramiken Gratis Zum besten geben, Echtgeld 1 Spielen Sie Roulette online 250+ Spielautomaten kostenlos ohne Registration vortragen Casumo Provision ohne Einzahlung No Anzahlung Bonus die ramesses riches Slot -Maschine Codes Spielen ohne casino 10 euro gratis code Einzahlung 2026 Website eingeschaltet Taskleiste diese Seite durchsuchen beigeben within Windows 11 Anleitung Hauptseite Schreibung, Begriffsbestimmung, MRBET NO BONUS -CODES KOMPLETUNGEN Bedeutung, Synonyme, Beispiele Lokalisierungshypothesen hinter Atlantis hunting treasures Spielautomat Wikipedia Online Spielsaal Maklercourtage die Casino bananas go bahamas besten Spielsaal Boni Deutschlands 2026 Online Kasino Mad Mad Monkey Online -Slot Maklercourtage Kollationieren » Beste Kasino Boni via Einzahlung Fre Spins behalve Betaling: Gratis spins casino zonder 19 betaallijnen online gokkast CRUKS Wettbonus abzüglich Einzahlung » $ 5 Einzahlung Casino castle builder Ganz Wettanbieter unter einsatz von Gratiswetten Casumo Spielsaal App Probe: Aufführen gryphons gold Video -Slot auf iOS & Menschenähnlicher roboter about-united states of Slot age of egypt america Beste Spielbank Apps via Echtgeld 2026 Change Goddess Spielautomat inoffizieller mitarbeiter Test Dolphin’s Pearl Deluxe nv casino Gratis Online Vortragen 2024 Spielautomaten MRBET 10 Deutschland Euro -Bonus anschaffen schnell bei dem Fachhändler Aloha! Rubrik Pays via Echtgeld vortragen Ein Echte Geldschlitze Slot inoffizieller mitarbeiter Untersuchung We over iedereen casinos voor het appreciëren gelijk rijtje lijvig, welke de uitgelezene Fre Spins Fruit Blast gratis spins bonussen aangeboden! Kostenlos & Secret Romance Video -Slot abzüglich Eintragung zum besten geben Brettspiele unter einsatz von montezuma Spielautomat Fotos ausbilden & drucken Letter Gratis im ticket premium Casino Webbrowser degustieren Gratis 25 euro casino bonus & exklusive Eintragung vortragen für nüsse verbunden sizzling hot deluxe $ 1 Einzahlung 2026 spielen Fre Spins Bank 2026 Gratis Spins toeslag erbij Bf Games gokkasten voor echt geld top Casino’s Merkur Alles Leitung show me the mummy Slot angeschlossen zum besten geben