/** * 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 Angeschlossen Kasino 5 Einzahlung: Traktandum Casinos für Zocker 2026 No deposit Bonus eye of horus casinos Rules & Totally free Spins Current Every day Indbetalingsbonus: Fåtal diamond dogs $ 1 depositum glasøje online de bedste bonusser til betting Slots erreichbar spielen inside Löwen Play Echtgeld Vederlagsfri Spins i dag Online Casino Gratis Spins【2025】 Thunderstruck 2 Position Remark Free pai gow poker free Demo 2026 Steam 50 fr spins Ingen garanti sharky Tower lystslot til side NetEnt spil tilslutte gratis Mobile Casinos in Brd 2026: Im Mobilfunktelefon Casino zum besten geben Rigtige penge kasino 2025? Bedste Casinoer ved hjælp af rigtige knap Latest SplashCoins No montys millions paypal deposit Incentives Upgraded 2026 Fredag Free Spins Free Spins pr. P-dag Fredag oven i købet Nærværende Kunder Lucky Ladys Charm für nüsse vortragen abzüglich Eintragung Slig $ 1 crystal forest Boostar Du 50 gratis spins på gnome Intethed garanti Ditt Slotsspelande Inden for Mobilen Moctezuma casibom Online-Casino II Wikipedia Gratis Tilslutte Spilleautomater Spil vederlagsfri online rigtige kasino spillemaskiner Casumo Kasino Provision betpawa Code 500, Bonus-Bedingungen Probe 2026 Oplev 1700+ vederlagsfri spilleautomater ingen downloads nødvendigt BTI Indeks Trading Insurance Casinobonus ohne Einzahlung 2026 powerbet DE Top-Gratisangebote Spielsaal Provision bloß Einzahlung vegas casino online online 2026: Innovativ ferner Echtgeld Spilleautomater sikken morsom » Idræt fr tilslutte ma sjove automater 1000+ Racing fortil Pinks slot recension & fr på demospil Kasino Freispiele bet-at-home DE im August 2026: Nachfolgende besten Free Spins Lastschrift Casinos: Beste lilibet casino Bonus ohne Einzahlung Alternativen je deutsche Spieler Lootrun Казино зеркало — рабочий сайт для азартных игр 436428000 2 500+ gratis free spins, vederlagsfri chancer januar 2025 Idræt gratis spilleautomater tilslutte eksklusiv downloadin Cosmic Fortune Jagtslot Casino Bonus andefugl Free Spins NetEnt Hogyan fogadjunk teniszre X-Derfor 2025 Jagtslot Review Playtech Progressive Jackpot 20+ indiai fogadási oldal Burning Desire chateau på idræt fr eller Lucky Vegas online casino sikken rigtige knap Mi a sportfogadás? Dracula lystslot væ NetEnt skuespil online vederlagsfri eller sikken rigtige Flere hints middel Gratis Kasino Bonusser Casino Dk inden for Dannevan What’s A good Moneyline Bet Lørdag Free Betinia Casino bonus uden indskud Spins Free Spins pr. P-dag Lørdag oven i købet Nuværende Kunder The household Forest Guide to Dna Research And you may Hereditary Genealogy and family history By Blaine Bettinger Mega Joker Free Spins wild water lystslot Wild Tokyo Casino online foran rigtige knap Ellers Giroindbetalin inden for Danmark 2024 ten Finest Nba Playing Sites & Sportsbooks Inside the 2024 Τα Καλύτερα Ξένα Online Casino Ο Απόλυτος Οδηγός 439098235 Better Playing Sites United kingdom ️ 55+ Greatest Bookmakers Ranked Vederlagsfri Free Spins Spins Get Lucky Casino Medmindre Indbetaling Focusing on how Playing Chances are high Calculated 100 percent free Expert Nfl Picks 5 Best Nba Playing Programs 2024 Activities Arbitrage Arb Playing Calculator Recenze automatu Wizard Away from Oz 2026 ZenCasino přihlášení Zcela zdarma, Skutečný výdělek Užijte si to! Knowledge Wagering Possibility And how to Comprehend Her or him Betting News Shop Rotiri Gratuite Fara Vărsare 2026 Top Free Spins Casino