/** * 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 Szerencsejáték-vállalat Hősök Bónusz és Vélemény 2026 Regisztráció Biztosítson 100%-ban ingyenes pörgetéseket three-dimensional Harbors 2026 Gamble Free and you can Real cash 3d Harbors Jobb Zimpler Helyi kaszinó weboldalak 2026 Legjobb online kaszinók Zimplerrel King of your Nile Ports Review ️ Enjoy Aristocrat’s Free Pokie! Mobile Pokies for free or Real cash Enjoy On the internet Pokies for the Mobile Bravery Szerencsejáték Vállalati Vélemény, Ingyenes Pörgések és Ösztönzők A knowledgeable Free Aristocrat pokies around australia 2026 Mohegan Pennsylvania Helyi hitnspin belépés Magyarország kaszinóüdülő Wilkes-Barre-ben, Pennsylvaniában Online Pokies Enjoy 7,400+ Free Pokies Online game! Playamo legjobb online kaszinó befizetés nélküli verde casino kaszinó értékelése 2026 $100 Üdvözöljük Extra Jobb Bing Pay szerencsejáték-vállalkozások, amelyek felismerik a verde casino bejelentkezés mobil befizetéseket 2026-ban Irish Luck helyi kaszinó befizetés ice kaszinó HUN nélküli ösztönzők 2026 Free Enjoy & Greatest Recommendations for 2026 3. legjobb vulkan vegas Magyarorszag lépés: Online kaszinók, amelyeket bankkártyákkal választhat 2024-ben A verde kaszinó promóciós kódok legjobb szerencsejáték-vállalkozások ingyenes pörgetések bónusza 2026-ban: Igényeljen ingyenes pörgetéseket befizetés nélkül 100 percent free Aristocrat Pokies Australia Play free casino poker servers online! LeoVegas Extra Jelszó: $50 teljesen hitnspin kaszinó bejelentkezés ingyenes választás vagy $1500, 100 ingyenes pörgetés 2026-ban A goldbet kaszinó bónusz legnagyobb befizetés nélküli bónuszok 2026-ban +990 aktív Szintén kínál Play Free Slots Online No Install Zero Registration Needed A legjobb online kaszinók, amelyek ice casino promóció 100 dolláros befizetés nélküli bónuszt kínálnak A legjobb online kaszinók vulkan vegas azonosító bejelentkezés valódi pénzzel az Egyesült Államokban A legjobb kaszinó oldalak Free Revolves No deposit » The new Totally free Spins To your Registration 2026 A tíz legjobb online kaszinó valódi legjobb befizetés nélküli hitnspin 2026 pénzért az USA-ban, 2026. július Legalacsonyabb befizetésű kaszinók vulkan vegas alkalmazás letöltése Magyarországon 2026-ban Az Egyesült Államok legjobb alacsony befizetésű szerencsejáték-vállalatai Free Spins No-deposit 8,500+ Totally free Revolves in the Real cash Casinos Helyi kaszinó Extra kódok hitnspin frissítési alkalmazás az egyéni résztvevők számára. Követelmények 2026. július LeoVegas Értékelés 2026: Mobil Kaszinó, Nyeremények verde casino bónuszkód még ma és Hozzáadott Bónusz Feltételek Ellenőrzőlista hogyan kell használni a ice casino bónuszt és publikáció Kingbit helyi kaszinó: Portáljuk, legtöbb bet játék amely segít Önnek online szerencsejátékban one hundred Free Spins No-deposit United kingdom 2026 Totally free 100 Spins Offers Sherlock Holmes nyerőgépek, Sokkal jobb hitnspin nyerőgépek promóciós kódjai ingyenes és valódi pénzes játék Gamble 14k+ Free Ports On the web No Registration No Download Befizetés nélküli helyi kaszinó bónuszok Teljesen online kaszinó verde casino befizetés nélküli ingyenes szerencsejáték-vállalkozások Irish Fortune Szerencsejáték létesítmény Megjegyzés 2026 Lehetne ice casino bónuszkód még ma biztonságosabb? Fishin’ Madness Honor Lines Slot Demo & Review A legjobb fizetős verde casino alkalmazás szerencsejáték-vállalkozások a 2026-os dumps és betéti kifizetések között A legjobb szerencsejáték-vállalkozások befizetés goldbet bejelentkezés regisztráció Magyarország nélküli bónusz szabályai 2026-ban. Ingyenes Signal-Upwards Now ajánlatok. Gamble Free online Harbors Best Middle 100percent free Harbors Zero Download Blaze Of Ra Position 100 percent free Enjoy Online casino Harbors Zero Download Women Which have Weapons Suspended Start Slot Game Trial Gamble & Free Revolves Enjoy Games On the internet for free Blaze from Ra Position Remark: Statistics, Provides & Payout Possible Kaszinó százalékos tippek az USA-ban Minden vulkan vegas kapcsolattartó itt: Magyarorszag 2026-os kiadványod Totally free Bier Haus slot machine ZARbet fifty 100 percent free Spins No-deposit Extra Choice On the internet Position Game inside South Africa which have YesPlay Weight Rabbit Slot Remark and Free Demonstration 96 45% RTP Hazard High voltage Slot: Free Demo Big time Betting Invasion Avoidance System Availability Refused Hot Deluxe Slot from the Novomatic Wager Totally free