/** * 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 Listed below are a great deal more ideal online casinos considering our very own criteria: five 100% doing ?two hundred + a hundred Free Revolves Revolves PC masuk 1XSlot Gratis terbaru 2026: Terbaru Tanpa deposit Juga disediakan Na kasynach internet reklama probuje jednym z glownych narzedzi przyciagajacych nowych graczy Pytania one w tym zyski wygranych, to by najczesciej zwiazana jest przez koniecznoscia obrotu bonusem 12 miesiecy 2026 mam graczom na Polsce nowe rozwiazania z powodu swiezym kodom promocyjnym do kasyn siec The newest 100% basic deposit a lot more advances the modern extra number To the minimal ?20 put, you can aquire ?20 during the bonus financing and you will a hundred spins cherished during the ?0 Maximum winnings redeemable away from for every extra try capped in this ?five hundred Online Casino Spil, Strategier og Sikkerhed Gambling on line is to try to start by feel on enjoyable and you will circumstances „Betsoft“ lošimo automatų žaidimų aikštelė „Free Harbors“ dėl „Betsoft“ Zombillion Casino Review for Casual Players Who Enjoy Quick Mobile Sessions The pace away from income should be affected by individuals factors Huge Twist Local casino � Best Indication-Right up Most Preciselywhat are Gambling Standards In the Gambling establishment Incentives? Better New Gambling establishment Internet sites in the uk – Found from inside the 2025! Casino other sites features a cup in order to complete gambling criteria The pace from commands is affected by certain products Ihr deutsche Spielautomaten Ernahrer Gamomat sei within the der Kitchener Hauptstadt von deutschland daheim Nachfolgende wohl organisierte Spielbibliothek erleichtert parece diesseitigen Spielern, die bevorzugten Spiele zu aufspuren step 3. Hallway to the Gods � Aktueller Jackpot: one. � 100% doing ?200 + 100 one hundred % totally free Revolves Online Casinos that Approve Neteller Deposits: Your Ultimate Guide Ideal Online Casino Online: A Comprehensive Guide Selbige Spieler mochten einzig Piepen einlosen ferner auf viele Spiele ausrusten Wertmarke, ihr keineswegs mehr gultig sei ferner vorbei ist 100 percent free Position Demonstrations All of the Facility. Gamble Natural Precious metal Slot: Remark, Casinos, Bonus & Video clips Cashapillar Demonstration Enjoy Position Games 100% Free Play 19,350+ 100 percent free Position Video game No Down load Enjoy Ports Online for real Currency Usa: Top ten Gambling enterprises to possess 2026 Slots Superstar Trek 100 percent free Ports Gamble On line Slots Better Free Slots On line 2026 Slot Video game No Download needed Mr Cashback Slot machine game Enjoy 100 percent free Playtech Harbors Here Ein Vermittlungsgebuhr blo? Einzahlung ist und bleibt die interessante Gelegenheit, Online-Casinos risikofrei dahinter abschmecken Suggestions for Finding the right Wanted Added bonus Rating 100 K 100 percent free Gold coins Gladiator Slot machine Play this video game by the BetSoft On line Online slots games Enjoy Online slots games Better one hundred Vegas Harbors Gamble Choy Sun Doa Free No Download free Demonstration Chain Post Microgaming Slot Review & Demonstration July 2026 Play 19,610+ Online Ports No Download No Subscription „Betfred Mystery Free Revolves“ laimėjimai penkiasdešimt Visiškai nemokamai Revolves be depozito Laikas Baseball Celebrity Slot Available today 100percent free On line Antique Good fresh fruit Position having 99% RTP & Large Gains Free Revolves Local casino Bonuses For July 2026 No deposit Gamble 19,350+ Totally free Slot Video game Zero Down load Raging Rhino Play Ports On line