/** * 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 Frank Gambling -kasinon talletusvapaa kannustin 2026 Lunasta ilmainen nautinto Suurimmat Yhdysvaltain mobiilipeliyritykset vuonna 2026: luokitus ja puiteluokitus Parhaat kultakolikoiden tarjouskoodit 2026 Lunasta 75 Etelä-Carolinassa! Blackjack Online Free: The Ultimate Overview to Play and Win Fastest Payment Online Casino: Where Speed and Convenience Meet Time Casino Lisätty bonuskoodit & Ei talletusta Tarjoaa Myös Heinäkuu 2026 Verkkopohjaiset kasinot Oikealla rahalla 10 Parempaa Yhdysvaltain kasinosivustoa Vuodelle 2026 Lataa kasino-ohjelmisto iOS:lle ja Androidille Leonardo da Vincin Wikipedia Deutsche Casinospieler sein eigen nennen angewandten Pluspunkt, dass in der regel freund und feind Spielsalon Spiele blo? Einengung zuganglich eignen Yhteiskunnallisten uhkapelien joukko 2026: Pelaa oikean tulon pelejä ja voita palkintoja Ilman talletusta saatavat lisäkoodit kesäkuu 2026 matala kierrätysvaatimus, vahvistetaan joka päivä Discover the Excitement at Charles Casino & Sportsbook Winph Casino Kiehtovia kolikkopelejä, kannustimia ja turvallista pelaamista Parhaat nettikasinot Yhdysvalloissa 2025 Oikea raha, bonukset ja uudet sivustotParhaat nettikasinot Yhdysvalloissa 2026 Rinnakkaisanalyysi NetBet-uhkapelialan kommentti vuodelle 2026: Kannustimet, pankkitoiminta, pelit ja paljon muuta İlk baxışda azərbaycan 1win casino sadə interfeysi ilə seçilir Test Post Created Insights into Admiral Casino Reviews on Trustpilot Play Free Slots: A Guide to Taking Pleasure In Online Casino Games Without Spending a Dime Discover the Exhilaration of Free Roulette Game Online Parhaat Neteller-pohjaiset nettikasinot maassasi vuonna 2026 Vinkkejä Liity mukaan toimintaan Fortunate Birdissä Bestandskunden profitieren von regelma?igem Cashback sowie Daily ferner Weekly Quests Mit freude referieren unsereins Ihnen die diskretesten Initiative, um nach meinem Vermittlungsprovision zu ankommen Dean Burmester szerencsejáték-profilja Lóversenyre játszva, azt mondta nekem Top 10 Washington Sportfogadási Bónusz Július Matthew Jordan Esély, tippek és játszhatsz szerencsejáték stílusban Fogadási szavak kvíz Liv Golfers Within the 2024 Uk Discover Occupation As well as their Odds To help you Winnings Lootrun — Официальный сайт казино -286695635 Washington Wagering Theoretically Courtroom Full time Info Online gambling Faq Best Betting Exchange Web sites In the 2020 Casino poker Traps New york Knicks Vs Los angeles Clippers Chance, Information And Gaming Style Better Craps Minimal Bet And you can Opportunity Inside Las vegas 2024 Best Horse Race Gaming Sites Wagering Vs Gambling establishment Gaming What exactly is An above Lower than Otherwise Full Bet? Playing Totals Told me What does The fresh Moneyline Indicate Inside the Sports betting? Choice Your Clothing To the Anything Parempia paikallisia kasinokanta-asiakasohjelmia pienten panosten ammattilaisille kesäkuussa 2026 What’s the Nfl Betting Plan? Wagering Laws, Guidance To have Professionals And you can Instructors Päättynyt ja vaihtoehtoinen $1 talletus Reactoonz tarjoaa myös DoubleDown ilmainen 5 casino mobiili Casinon kuponkikoodit ja bonukset kesäkuu 2026 Betting Possibility, Sports News, Picks & Alive Results Qua nur 2 Euro starten ferner nur die gesamtheit versuchen?