/** * 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 Справочник на хазартни предприятия, Приложение vulkan spiele които предлагат 200% бонуси What’s cellular look at put and how to put William Hill 50 free spins no deposit casino games it to use Freispiele, Casino-Einzahlung Google Play Maklercourtage & Promo Codes Quick Cash Spin slot Detachment Casinos Fastest Payment Web based casinos 2026 Jackpot Raider Unlock Secret Login Rewards Spinbaras Bonus-Geheimnis gelüftet Unlock Cryptoleo’s No Deposit Bonus Secret Now Unlock Instant Jackpots at Casual Spin Casino Book from Aztec Grand Wheel casino Free Casino slot games On the internet Play Game Enjoyment, Amatic Claim Roulettino Free Bonus Right Now Melhores Casinos Portugal – ranking dos melhores sites de casino online Meilleur Casino en ligne fiable – Avis 2026 & Tests Joueurs Non GamStop Casinos UK 2026 – Best New Casinos Not on GamStop Zonder Cruks Online Casino – Registratie en Inloggen Magyar Online Casino legális működéssel és engedélyekkel Book of Ra deluxe Bingo Verbunden Spiele Playn Go Slot Free Spins Letter zum besten geben! Ksi Casino Goes All In Promises Unforgettable Wins Spinmywin Secure Login Unlocks Your Winning Edge Skúste Beton Red Casino Pre Skvelú Zábavu Vegas Plus Casino : Hits Rapides et Gains Instantanés en Déplacement Master NineWin UK Your Bold Winning Playbook Carlospin Casino Online Geeft Je Een Speeltuin Vol Winst Ranked from the Actual Cleopatra Rtp slot machine Players Epikstar Kazinoda Yutuqli Lahzalar Roulettino Kasyno Najbolja Zabava Zitate über Lage SpyBet-Cashback 121 Zitate KSI Casino Reality Check The Truth Revealed “Nyd Fr Spins på Spilleautomater bland Casino Housemusi Din Xon Bet Casino Ingen indbetalingspromo koder Online Kasino Guidebog” Limitless Thrills Chill4Reel Casino Canada Най-добрите бонуси за безплатни завъртания Изтегляне на приложението bombastic casino в САЩ за 2026 г., разгледани Free Penny Harbors Play Totally free Cent Slot machines On the Dolphins Pearl Free 5 deposit internet Gunslinger: Reloaded Et fedt idræt med store YoyoSpins id login jackpots Best Online Big Bad Wolf Hack online slot casinos 2026: Better 5 A real income Casino Internet sites Spillemaskiner Online 50 Fr SPINS Fishing Frenzy Pr optagels i24Slot app download 2024 Ingen hjemmel Spillemaskiner Online 50 Xon bet login registrering Gratis SPINS Fishing Frenzy Pro optagels Ingen hjemmel Демонстрация в музея на пъзелите. Насладете се на безплатни пристанища по vulkan vegas вход mobi време на Голямата комисия. Spillemaskiner 50 vederlagsfri spins online buffalo Intet depositum Immerion casino app login skuespil vederlagsfri spillemaskiner online tilslutte Slotozilla Напълно безплатни въртения в рейтинга на пристанищата 100 процента безплатни бонуси за въртене в онлайн казината Казина в интернет САЩ 2026 hitnspin казино бонуси Тествани и оценени » YoyoSpins bonuskode Kitty Cabana slot spil 50 Gratis SPINS siberian brandstorm Som registrering Ingen depositum vederlagsfri prompte tilslutte Напълно безплатни завъртания без депозит. Стимули в местното казино, Приложение hitnspin за iphone август 2026 г. Guida alle app di casinò online: gioca ovunque con sicurezza e velocità nel 2026 Безплатни завъртания Без депозит Стимули за хазартни заведения Август goldbet 2026 200 Без Промо код за слотове hitnspin депозит 100 процента безплатно Revolves бонуси Бонуси за казино без депозит 188+, валидни vulkan spiele стара версия за вход до август 2026 г. По-добри $100 Изтегляне на приложението ice casino в българия напълно безплатни казино бонуси без депозит. Вземете своя още днес. Spilleautomater foran sjov » Ybets tilmeldingsbonus Spil gratis online ma sjove automater 1000+ Darmowe 100 spinów w Betonred czekają Parhaat Ilmaiskierrokset Ilman Kierrätystä suomalaisille pelaajille vuonna 2026 Scopri Vinci Divertimento Garantito Betonred