/** * 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 Játssz teljesen ingyenes online kaszinójátékokat Aztec Empire Wikipedia Kasína s minimálnym vkladom Hrajte bez stresu a bez vysokých nákladov Minimal Deposit Local casino Websites Best $1 to help you $ten Low Deposit Gambling enterprises U S. online casinos: The following is in which all of the 50 says currently stand-on legalizing internet sites playing, local casino enjoy Élvezd a több mint 9000 ingyenes Position Zero videojátékot, a letöltést vagy jelzést Internet casino Ratings Best Respected On-line casino Internet sites 2026 from the Getb8 Tilslutte Casino Katalog automobilov Objavte svet automobilov a ich špecifikácie Kasína s minimálnym vkladom Hrajte bez stresu Greatest A real income Web based casinos within the 2026, Proven Finest Web based casinos the real deal Money 2026 Majte srdce pre zábavu Nove online kasína pre Vás https: sun moon slot view?v=aDrsItJ_HU4 Beste online casinospellen up to dat Nederlanden bil NextGen Gamin Best On-line casino inside Asia 2026 A real income Gambling establishment Internet sites Internet casino 1 million Celebs Incentive ᐈ Enjoy sam on the beach mobile Online slots games, Casino Slots from the Getb8 No Lowest Put Local casino Uk Better Lowest Put Gambling enterprises 2026 Greatest step 3 Minimal Put Casinos to have 2023 FLETES TAURO Online Kasino medmindre ROFUS 10 Bedste udenlandske casinoer 2026 Gamble 19,350+ casino Dunder login Totally free Position Games Zero Download Bookies com Condition British Apple Pay Casinos Guide to Mirror The brand new UKGC Wagering Legislation and you may Incentive Restrictions De Bedste Tilslutte Spillemaskiner Inklusive Rigtige Middel i 1 davinci diamonds Danmark 2026 Finest Visa Gambling enterprise inside 2026: Web based casinos One to Deal with Charge Goldilocks plus the Crazy Offers Position Gümüş Kolye Gümüş Yüzük Gümüş Mayan Chief play slot Bileklik Brango No-deposit Incentive Rules: $100 100 percent free Chip + 200 Totally free Revolves Greatest Real cash Us Casinos 2026 Earnings Confirmed Idræt gratis tilslutte spillemaskinerne på tilslutte Myjackpot dk Better the the dog house megaways slot machine three hundred% Deposit Bonuses to enter 2026 Lowest Minimal Put Casinos Australian continent Explore $step one, $5 & $ten Debit Cards Casinos on the internet 2026 Deposit & Gamble from the Greatest Web sites Variation casino kitty bingo 60 dollar bonus wagering requirements Records Mega Moolah Slot Evolution within the United kingdom Field Teljesen ingyenes nyerőgépek letöltés nélkül, előfizetés nélkül Doubleu Gambling enterprise 100 percent free Chips, Coins and you may Giveaways A long time ago Slot: Information, Free Spins and Greatest Cash Software Casinos for all of us Professionals within the 2026 Once upon a time Position: Resources, 100 percent free Spins and much more Játssz Ports-ot valódi pénzért online a Ca-ban Kasína s minimálnym vkladom Hrajte bez veľkých investícií Instant withdrawals turn casual gaming into a seamless flow of wins and cashouts Test Post Created Survivor valley of the gods slot Megaways Slot Online game Demonstration Gamble & 100 percent free Revolves Better Fast Payment Online casinos 2026 Finest Immediate Withdrawal Sites Casino NordicBet Veiledning Foran Norske Spillere Ideas on how to Earn to your Slot machines RTP, Volatility & Bonus Resources Kasínové Hry Bez Vkladu Objavte Svet Zábavy a Výhier Online Blackjack Ingyenes Játékoktató, Tanulj meg pénzt gyűjteni 100 percent free Harbors 39,000+ On line Position William Hill apps Games Zero Install Mr Green Local casino Opinion  July 2026: Rating an exclusive Extra