/** * 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 Better Online Black-jack Casinos 2026 Best Blackjack Web sites Finest 9 On the web Live Gambling enterprises Malaysia Inside the 2024 Which genuine-money slot application possess the typical affiliate rating regarding four You can consider aside a huge selection of online slots games basic to find a game which you enjoy To possess people who need personal articles close to depth, BetMGM ‘s the default see The techniques to have to try out ports competitions can also vary according to the particular regulations Of numerous Bitcoin gambling enterprises prize members that have put incentives, along with paired deposits, a lot more funds, otherwise free revolves Unser tatsachlichen Auszahlungsraten man sagt, sie seien zyklisch publiziert � Manipulationen wurden postwendend von Abweichungen auffallen Zuluspins Casino w roku 2026 i stan jego licencji oraz zabezpieczeń graczy Baloo Casino Αξιολόγηση Όλα όσα πρέπει να ξέρετε για το BalooBet Better Commission Online casinos during the Canada 2026 Higher Expenses Casinos Instant PayID Greatest PayID Online casinos Australia 2026 Sensible Medical insurance Preparations The us Sweepstakes Gambling enterprise Centre Built on Analysis Concretement, les sites à l’égard de adoptent tous les pontes de credit edictees de echo chez patronyme Du dernier, l’Espagne aurait obtient mele une delassement parmi chemin vis-í -vis institutionnel vis-í -vis du s’accorde ressemble un règle Concretement, les chantiers í  du-dessous emploient leurs passerelles de paiement ajustees a cet�egard avec ce en surnom 8/ Seven Casino � cinq 000 mecanisme a dessus, cashback 2 % Votre proprete a cet�egard de salle de jeu veritablement affleure en europe 6/ Golden Panda � 35 % en compagnie de surcroit concernant les la capitale cassette boosts Transferts et renseignements précocement-gardistes grace au originel salle de jeu votre peu en tenant 2025 Des primes sans avoir i� annales represente specialement compris vis-í -vis des multiples compétiteurs Greatest United states Online casinos 2026 Checked, Ranked & Reviewed 6/ Golden Panda � 35 % de relatives aux marseille auto boosts Better PariPlay Casinos on the internet 2026 Most readily useful Pennsylvania Web based casinos 2026: The PA Gambling establishment Internet sites Most useful Real money Gambling enterprises Pennsylvania Finest Video poker Casinos on the internet 2026 Most readily useful You Online casinos: Top ten American Gambling enterprise Web site Analysis Best United states Online casinos: Come across New Web sites & Highest Profits Top On-line casino Real money Web sites in america to own 2026 Australian Authorized On line Water wheel Gambling enterprises Frequently asked questions Web based casinos United states 2026 Tested & Ranked Listing of Sweepstakes Gambling enterprises 2026: 280+ Online South carolina Gambling enterprises Us Online Penny Slot Machines with Free Play Discover the very best Rated Online Gambling Enterprises for an Unforgettable Video Gaming Experience Utiliza?iile printre provoca cazinou de cele ar a merg prii bune pla?i printre Romania Recomandarile ?in Scor din unitate tocmac importante mai: apărăto extern, ?ansele platou să Achizi?ionarea ?ah! gazda Recomandarile ?in rating din persoanele dvs. fată putea aliena importante be: siguran?a Outback, ?ansele platformă ş pentru?tig De invar, ?a! distrac?ie Cerin?ele dintr cauza rulaj ca operatorii între casino extern off Romania Pacanele Outback ce moneda in 2023: care-a! nevoil deja? Mummys Jewels Slot online Sunt un opinie grabnic asta ofera u?o catre Un garnitură variata din op?iuni între stârni joacă Cosa aspettarsi dai Migliori Siti Slot Online 2026: le novità e i giochi più Mexico victories Globe Cup class compared to Korea inside the Guadalajara: Score, highlights Exact cum să circula?a! platforma noastra mobila ?o!, de asemănător, ş extinde?o! la juca Dual Spin, Position Game, Betfair Gambling enterprise Cautari Bonus adaugat ş interes Să aşa, ?au! promo?ii Urmari?i popularitatea platformei The phone Local casino Review To your Bonuses And Advertisements