/** * 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 On-line casino Incentives and you can Offers 2026 Better Apple Shell out Gambling enterprises 2026 Create Secure Fruit Pay Deposits & Distributions £1 Deposit Casinos: Explore a minimal Deposit in the united kingdom Tomb Raider slotimäng: Mängi veebis tasuta ilma installimiseta Microgamingult 100 protsenti tasuta keerutusi ilma sissemakseta kohalikus veebikasiino 200 pööret värskest. Pakkumised kehtivad ka aprillis 2022. The overall playing sense towards system are going to be smooth to the machines, smartphones, and pills Watch pony races, enjoy within casino, and luxuriate in an overnight remain at this Arkansas lodge Täielik Ühendkuningriigi komplekt 100% tasuta keerutusi kaardiliikmelisusele Casinos on the internet one to play on smartphones as well as hand out zero deposit incentives on the members Even though design slowed down, the project was still likely to open promptly No-put incentives are typically provided by the new casinos or current casinos sporadically all year round Der Oxymetholon Injektion Kurs: Alles, was Sie wissen müssen Miksi valita WeezyBet livekasino: rehellinen arvio ja pelaajien kokemukset Running Wealth Gambling establishment proved to have a good bonus program while in the my evaluation Rescue my title, email, and you will website in this web browser for the next big date We comment Void in which blocked by-law (California, CT, ID, La, MI, MT, NV, New york, New jersey, WA) For every single also provides another number of regulations and you may gameplay feel, providing to various choices Toppspel att testa på Wild Jackpots Casino: slots och bordsspel för varje spelare Spela live på SlotyStake: Få ut det mesta av din casinoupplevelse Wsm Casino België: ontdek de voordelen van live casino met 24/7 ondersteuning Cut Stack 150 Kurs: En Udforskning af Effekter og Brugsområder King Casino UK slots: Explore the best games and bonuses in 2026 King Casino UK slots: Explore the best games and bonuses in 2026 Geeignete Steroidkombinationen für Anfänger im Bodybuilding Les fonctionnalités incontournables de Platinum Casino : slots et plus encore Betrophy Casino: parhaat bonukset ja tarjoukset vuonna 2026 Die Vorteile von Steroiden zur Steigerung der Muskelkraft und -leistung während des Trainings Why AfroPari is the top choice for live betting enthusiasts: pros and cons explained Die Rolle von Steroiden in der Optimierung der Bodybuilding-Leistung Navigating the world of free spins and live dealer tables at Mirror Casino Η Μαγεία των Spinsy Ανακαλύπτοντας τον Κόσμο της Ψυχαγωγίας Oplev Bumbet Casino Danmark: top live casino og spændende slots i DKK Oplev Bumbet Casino Danmark: top live casino og spændende slots i DKK Steroide und ihre Rolle bei der Optimierung der Erholungsphasen im Sport Optimierung des Bodybuildings: Sicherer und effektiver Einsatz von Steroiden Fantastic Dragon Position On the internet Demonstration Wager Free Gladiator Casino slot games On line Totally free Gamble Video game and you may Comment That’s why we advice you choose a different sort of site which have a good higher Shelter Index The fresh new respect program is actually vastly increased and you will comes with free South carolina spins when you level up Scorching Luxury Position Games Trial Enjoy & 100 percent free Revolves Have no idea the rules getting Eu Roulette and/or differences between European Roulette and you will American Roulette? They are more established networks which have licensure away from acknowledged authorities overseas Co hráči objevují na fBET: oblíbené automaty a živé hry Co hráči objevují na fBET: oblíbené automaty a živé hry Lucky Jungle Casino: Ein Leitfaden für neue Spieler zu Boni und Live-Spielen Co hráči objevují na fBET: oblíbené automaty a živé hry Co hráči objevují na fBET: oblíbené automaty a živé hry Verzeichnis ein Live-Dealer-Casinos Muss sagen Live-Tischspiele 2026 Frank Kasino Brd 2026 Echtgeldspiele, schnelle Auszahlungen & Boni Pusulabet 912 ile Yeni Bir Online Oyun Deneyimi