/** * 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 Finest Huge Bass Bonanza Harbors slot Da Vinci Diamonds & Position Internet sites Melhores Plataformas infantilidade 5 Reais sobre agosto criancice 2026 Bred Bruce Bet app anmeldelse Casino Addisjon Uten Almisse inni Norge April 2026 Gamecheck: Protegendo os jogadores puerilidade jogos online falsos Boho Casino: Quick‑Hit Slots and Lightning‑Fast Wins for the Modern Player Casino innskuddsbonuser Mr Bet 400% innskudd tilbud Anta best addisjon ved bidrag! Top 12 ofertas infantilidade Rodadas Acessível sem entreposto Agosto 2026 10 melhores cassinos conhecimento álacre com Roleta, Poker aquele mais 2026 Programas para Loteria Aplicativo Loteria Belzebu criancice Dork Unit Aprestar Slots Dado na Great com Casino Ciência Vivo Online Jogos Concepção Vivo Online Age Of The Gods Ruler Of The Seas Acabamento Acidental Tecnicas Puerilidade Dragon Tiger 150 rodadas grátis Acabamento Infantilidade Poker 2022 Your ultimate guide to fast withdrawals at PayID Pokies Australia: enjoy hassle-free cashouts Lieliski, svaigi augļi! Izbaudiet tiešsaistē 100% bez maksas! Mākslīgais džingu veidotājs: izveidojiet lipīgus džingus, lai pārvaldītu reklāmu tiešsaistē Danske Spilleautomater Online 2026 En Guide til Det Bedste 7. Iegūstiet 100% bezmaksas zelta monētas Lietotnes vulkanbet lejupielāde 2026 iekšēji, nevis izklaidējieties 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