/** * 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 Μοντέρνα θέση επίδειξης Fresh Fruit Frenzy λόγω του Dragon Gambling Δωρεάν Gambling & Γνώμη Explore the exciting world of online pokies at Best Online Pokies Australia 2026: Fast Tips for navigating the world of mobile casino apps Výherní automat Tomb Raider Remark 2026 96 5% RTP a bezplatná zkušební verze Hazardní podniky s převodem věřitelů 2026 Online kasina, která byste měli určitě provádět bankovní Bonusový kód RoyalGame převody Internetové kasino Zcela zdarma Revolvingové bonusy Výhry Skutečný bez vkladu FairSpin pro online kasina příjem 2026 Výherní automat Starburst: Užijte RoyalGame Česko bonus si zcela bezplatnou výherní hru od NetEnt: Bez stažení Maximize your gaming experience with exclusive promotions at Online Casino Australia 2026 Lemon Casino – szczegółowa recenzja Lemon Kasyno Kasino Mostbet – Strategie a tipy pro úspěch Arkada онлайн казино – мобильная версия сайта и доступ через приложение 1win — ставки на спорт в букмекерской конторе Tower Rush by Galaxsys – where to play this online casino game Sledování trino casino filmu Kmotr: kde byste ho měli sledovat online? Online hra Gamble Nuts Lifestyle Position Is Insane APK ke stažení aplikace Abu King Lifetime Zcela zdarma na automatu v demo verzi Unveiling the myths surrounding casino betting systems Plnitelné přírodní deodoranty, balzámy na rty, kasino bez vkladu RoyalGame líčidla a oplachy na ruce Maximize your gaming experience with Interac at New Online Casino Canada 2026 Най-добрият Бонус за регистрация Trinocasino анализ на хазартните заведения в Нова Зеландия за 2026 г. Най-високо оценени и проверени от експерти. Pin Up Казино – Официальный сайт Пин Ап вход на зеркало (2026) Najlepsze Kasyna Online w Polsce w 2026 Best Non GamStop Casino UK – Reviews and Rankings for 2026 Mostbet Online Casino – Honest Reviews and Player Experiences Пин Ап Казино – Официальный сайт Pin Up Casino | Входи и играй IGT Pin Up depozitsiz qeydiyyat bonusu Limanları: Reddish-i keçin Exploring casino games at Best Online Casino South Africa 2026: Unforgettable slots and live Mostbet AZ – bukmeker ve kazino Mostbet – Giriş rəsmi sayt 1win casino and sportsbook in India 1win Casino App for Android – Download the APK 1win Online Betting and Casino Official site in India 1win casino and sportsbook in India العب لعبة البلاك جاك على الإنترنت، واحصل على أفضل 10 مواقع قمار في عام 2026. Understanding the Tren E 200 Course: A Comprehensive Guide L’impatto della blockchain sui casinò online Magyar Online Casino biztonság: hogyan védd meg a pénzedet játék közben? Winning big: tips for novice casino players Article about goldenstar schweiz What makes online casinos appealing to players? Jouw eerste stappen bij Beste Online Casino Zonder Cruks: tips voor een succesvolle start What to expect on your first visit to a casino What makes a casino experience unforgettable? Ideal Sweepstakes Gambling enterprises 2026 Positions Ideal This new Sweepstake Gambling enterprises Analyzed To own August 2026 Greatest Sweepstakes Casinos You 2026: Better Sweeps Bucks Sites Most useful Web based casinos Better Local casino Websites in 2026 Top You On the web Roulette 2026 Enjoy Roulette On line inside Usa Top On the web Roulette Casinos from the U S. Get, 2026: Top Roulette Sites Reviewed Most readily useful No deposit Incentives in the us to possess 2026 No deposit Added bonus Codes Us Confirmed Now offers August 2026 Finest Real cash Online casinos Top ten Into the August 2026