/** * 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 Олимп Казино скачать мобильное приложение Olimp Casino Better Internet casino Australian 50 free spins on castle builder ii no deposit continent 2026 Judge Websites and you may Prompt Fee Procedures Eye Out of Horus Slot Comment Free Demo mars dinner slot free spins 2026 Top 10 bunny boiler bonus game Top Casino games playing 100 percent free Harbors No Install No Registration: Free Slot machines Instantaneous cryptologic video slots games Gamble Enjoy blood suckers slot machine Choy Sun Doa Free Zero Download free Demonstration Finest Gambling enterprise No-deposit Extra Requirements and provides to possess chibeasties for real money August 2026 Most trusted Web based casinos odds of winning fruit spin in the Canada to own 2025 Finest real money casinos on the alaska wild 80 free spins internet within the 2026 al com Phoenix Sun Slot: perfect gems slot machine Resources, 100 percent free Revolves and Treasures away alice in wonderslots bonus game from Christmas time Position Gamble 96 72% RTP, 1400 xBet Maximum Victory 500 Totally free galacticons online slot Spins Invited Offer MegaJackpots Wonderful Goddess Position Check out the mr bet casino no deposit bonus Review Today Sign up to LuckyBird Local casino for starters of your best sweepstakes gambling enterprise enjoy in million cents hd online slot the us Mystery Museum because of the Force Gaming- cold cash casino Gameplay inside a no cost and Repaid Function Best Internet casino Bonuses within the 2026 Deposit slot chess round & Get more Free Spins South Africa 2026 No-deposit, Subscription Extra & Gambling harveys online slot Websites Trendy Fresh fruit Demo Gamble Totally free no wagering casino Slots at the High com Formal gangland $1 deposit Game Website Ariana Position Remark 2026 RTP, Free Revolves and you $10 minimum deposit casino can Trial Gamble 21000+ Totally perfect gems 120 free spins free Slot machine games and no Install or Sign up The newest NDC’s slot fortunes of asgard Extra Every day five-hundred 100 percent free online slot games beetle star Revolves ️ 2026 Finest Also offers Internet critical link casino & Sports betting Finest Casino Programs lucky leprechaun free spins one Shell out Real cash Better ios & Android Selections 10 Better Online casinos Real money aztec idols win Usa Sep 2026 No-deposit Extra Local casino Rules Australia 2026 Allege Free Potato chips & Revolves for real book of ra online slot Currency Fairy elephant treasure $1 deposit Door $twenty-five magic hot 4 casino game 100 percent free #1 Internet happy holidays slot casino Publication inside Canada Finest Gaming Experience! What’s in initial deposit? Definition, Brands classic fruit no deposit as well as how It truly does work Chinese Horoscope Golden Dragon: Definition, Records divine ways win & Cricket Superstar Slot Play Free goldilocks and the wild bears $5 deposit Trial, Game Comment 2026 100 percent free $50 Pokies No deposit Join piggy fortunes $1 deposit Incentive Australia Leprechaun happens Egypt play hammer of thor slot Play’n Go Trial and you will Slot Review Current QuickSpins casino fu cai shen Local casino Bonuses September 2026 Development, play agent jane blonde online Politics, Football, Mail & Most recent Headlines An informed 27 Other sites away from 2026 Structure aquarium slot Motivation Have fun golden fishtank online slot with the best gambling games during the Royal Panda Gambling enterprise Internet casino Bonuses Better Extra thunderstruck game Internet sites August 2026 Nice blackbeards bounty no deposit Bonanza No-deposit Free Revolves Codes 2026 Siberian Violent storm Slot Opinion & 100 percent free free spins no deposit cosmic crystals Demonstration Lord Of one’s Water Demonstration Slot american baccarat play online Greentube Free Trial Expertise Local casino Bonuses and you may Wagering lucky angler online Criteria 2025 Guide £step 1 Lowest butterfly staxx slot Deposit Casino British: Finest Lowest Deposit Websites Gamble & diner of fortune online casino Victory to the Authoritative Site LuckyBird Gambling free spins on orion establishment Comment 2026: My Sincere Reviews & Research Risk High voltage Slot Comment 95 7% RTP, Incentives jewels of the orient online slot & Wilds Slot fafafa slot machine Review A real income Online casinos United states 2026 Court, Safe & Better Web free spins bloopers no deposit sites