/** * 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 Wie Live-Dealer das Online-Casino-Erlebnis verändert haben Woospin Casino Easter Bonus: Everything You Need to Know Exploring the World of Midnight Wins: An Exclusive Interview with Game Developers Reels of Joy Casino Provably Fair Games: A Comprehensive Review Nové české online casino Objevte vzrušení a zábavu z pohodlí domova Einstellungen für Ihr Spinsy Casino-Konto Spingranny Poker: Una Guida Completa al Gioco Exploring the World of Online Gambling with Oceanbreezecasino.net Unlock the Winning Potential with Let’s Jackpot Skrill Casino The Exciting World of Casino Coins Game 30264255 Datenleck bei Pistolo Casino: Was Sie wissen müssen Comment gagner au poker sur Goldenbet Casino Mastering Madcasino Sports Betting: A Comprehensive Guide Unlocking the Secrets of Loki Casino Bonuses: A Comprehensive Guide Tusk Casino: Οδηγός, Παιχνίδια & Ασφάλεια Tiki Casino : Revue complète d’expert Roobet entfesselt den Nervenkitzel des digitalen Glücksspiels Tragamonedas únicas en casinos: ¡Descubre las ranuras más sueltas! Medicamentos Para El Tratamiento De La Diabetes: Dosificación De Péptidos Cosmicslot Casino Boni im Überblick Candyland casino o otro casino: Alternativas y comparación Checklist for at få bonusser på Bizzo casino Best Online Casinos in 2026: A Comprehensive Review Activează 1650 rotiri gratuite santa surprise Rotiți gratuite fără depozit numai plată pe iunie 2026 Roaring majestic forest rotiri gratuite Forties Gratuit Aoac indian dreaming slot il joci 100percent Gratuit in 2024 Warum Slots in Online-Casinos dominieren Casino eFortuna: Recenzia 50 să rotiri gratuite reel rush de înscriere dar sedimen Completă și Flaming Hot $ 1 Depozit Îndrumar Absolut Rotiri Gratuite însă Vărsare iunie 2026 aruncați o privire pe site Top Oferte la Cazino Rotiri Gratuite Fara Achitare Deasupra 30 thief slot online Ş Bonusuri Active I Migliori Casinò con Payout Veloci Bonus dar achitare ultra hot deluxe Slot Machine 2026 Top bonusuri cazino dar depunere și rotiri gratuite Ştocfiş Bonus PariuriPlus resident Unibet online cazinou live $ 1 Depozit 2024: 50 rotiri gratuite ci depunere Die Evolution von Online-Casinos im Laufe der Jahre Dead continua sa citesti asta sau Alive 2 Demo by NetEnt Free Slot & Review BC.Game India Registration Your Gateway to Exciting Gaming Experiences Step-by-Step Guide to CasinoJoy Registration Your Gateway to Exciting Gaming Myth-busting common misconceptions in gambling strategies Драгон мани: Мифическое богатство в мире онлайн-казино Götter des Plinko-Spiels Ein episches Spielerlebnis Betfair Promo Code British Score £30 inside the free bets which have code ZSKAOL June 2026 Westcasino – Pragmatic Play Slots: Ein Überblick Wie man Goldwin Casino besucht: Schritt-für-Schritt Anleitung Guía de Códigos de Bonificación en Thor Casino Best Slots to Play Online Bet the advantage & Put count 20 times for the Slots to Cashout Keep in mind that lowest limitations incorporate, and it’s really always 100 Sc having a funds award Lonestar Casino doesn’t have one particular thorough online game library, with doing five hundred+ headings offered There are lots of this type of online game at best payout online gambling enterprise sites During the day ten, I experienced accumulated a maximum of 65,000 GC and you may 135 Minds Although not, than the big gambling enterprise operators, the newest products getting limited