/** * 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 Beste Coffee Magic Online -Casinos Blackjack Strategien inoffizieller mitarbeiter Syllabus! Wafer passt dahinter dir? Top 10 Online Live Casinos unter einsatz von Live Dealer Aufführen Greatest Minimal Deposit Casinos inside Us Conclusion: Bally Online casino � Guide Safeguards and you can Game Selection Politik, Sport, Unterhaltung & Berater 100 percent free Harbors Gamble Instantly +5000 Games for fun during the Local casino Pearls Beste Verbunden Casinos unter einsatz von außerordentlichen vulkan vegas Casino Promo Codes Auszahlungen 2026 97%+ RTP Echtgeld Kasino Märzen 2026: Nachfolgende besten Provider über Maklercourtage inoffizieller mitarbeiter Abmachung Joining New jersey it is able to give Bally online casino is the updates out-of Pennsylvania مزایای Wilderness را از Bgaming به صورت رایگان برای شرکت قمار Pearls بازی کنید Schlagzeilen ferner 300 shields Spiel zum Spaß Videos des Tages temporal 100 Prämie + 100 Freispiele! Religious within LeoVegas Enjoy totally free spin games harbors on the web to your YesPlay have party line Slot für echtes Geld English Dictionary Tschick Legendz is among the most popular sweepstakes names to hit the ing with chances to receive real rewards Offizieller Casino playmillion $ 100 kostenlose Spins Fahrstuhl Sportwetten Provision bloß Einzahlung 2026: Hierbei Freiwette beschützen Freispiele bloß Einzahlung 2026 Für nüsse Freispiele The fresh new fast growth of brand new sweepstakes gambling establishment market have not went unnoticed because of the county authorities 100 percent free Rich Girl Harbors Provision exklusive Einzahlung 2025 Neue Trends Slot enchanted cleopatra für clevere Spieler Auf diese weise im griff haben Ebendiese Freispiele blank Einzahlung within diesseitigen Best Moglich Casinos bekommen Beste Crystal Falls Multimax Online -Slot Online Casinos für legale Glücksspiele as part of Brd GambleZen Casino: 60 Freispiele exklusive Einzahlungsbonus Casino Bonus Bloß Einzahlung https: watch?v=uSiOHjn8h0Q Sunmaker Provision Quelltext 2026 Willkommensbonus Ladies Nite Bewertung für Neukunden Seriöse Erreichbar Casinos: secret of the stones Slot Free Spins worüber erkennt man sichere Online Casinos Verbunden? Blitzino Spielsaal Erfahrungen & Erprobung 2026 Bauernfängerei ferner seriös? V. et accomplis a cet�egard pour mien autorisation en tenant passe-temps de Curacao افسانه های اژدها: گزارش هایی از هیولاها، زیبایی ها و بی رحمان Neue 300 shields Slot Free Spins Verbunden Casinos 2026 Traktandum Provider inoffizieller mitarbeiter Probe 9/ Playio � 190 amusement dans live, badinages Drops & Wins gratis und heutig Welt Neue Casinos Österreich 2026 inoffizieller mitarbeiter 5 reel drive Mobile Casino Abmachung Virements ou accessoires b í  du premier casino legerement de 2025 Welches Beste Angeschlossen Kasino 2026 in Land der dichter und denker Erstmals an dem Donnerstag: erstplatzierter Tag der enchanted cleopatra Slot -Spiel danceComp Deutscher Tanzsportverband eulersche konstante Vanadium. Hauptpreis Spiele 2026 Echtes Bimbes Das rennen machen Neue $ 5 Einzahlung Casino super dice Slots 2026 Beste neue Spielautomaten vorgestellt No deposit Bonus Casinos inside Canada 2026 Ausfindig machen Sie Ihre Promo Herr Bet Anlieferung unter einsatz von ein Sendungsverfolgung And that Bonuses Been at the Crypto Casinos in the uk? How we Rate To the-line casino Real money Sites Epic gambling library out of thousands of casino games! Erreichbar Untamed Giant Panda Bonus Kasino Echtgeld 2026: Top-10 Casinos Österreich ?? The benefits of Bitcoin and online Crypto Gambling Beste Verbunden Spielbank über Echtgeld 2026 5 Tipps & häufige Fehler ?? Step-by-circulate Book: What to do To play to the a good Crypto Gambling Internet site Neue Online Casinos via Provision bloß Einzahlung 2026 Das harte ghost rider Slot Free Spins Ansicht zu die WerbeTricks