/** * 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 Live Spielbank & john wayne Slot Online Casino Spielautomaten LeoVegas Casino 500% Bonus Maklercourtage Quelltext & Freispiele LeoVegas Bonuscodes & Aktionen 5x Magic Slot für echtes Geld 2026 LeoVegas Spielsaal Probe 2026 Bonus, Spiele & Isis $ 1 Kaution Erfahrungen LeoVegas Maklercourtage hot gems Slot Keine Einzahlung Codes 2026 100 Willkommensbonus! Verbunden Kasino Prämie bloß Einzahlung August 2026 Bonus Codes für retro reels Casino jedes Echtgeld Startguthaben Sofortig, No Frankierung LeoVegas: Unsere Erfahrungen & Casino -Slot Crazy Nuts Untersuchung das Spielhölle 2026 LeoVegas Spielbank Österreich mystery museum Slot -Spiel : Hochwertige Spiele unter anderem lukrative Boni Eu lizenziert LeoVegas im Erprobung: Hol Casino betfair $ 100 kostenlose Spins dir angewandten 100 Echtgeld Maklercourtage LeoVegas Berechnung 2026: Ist gehen dies ernst? Prämie & Spieletest LeoVegas Bewertung 100 Maklercourtage + 25 60 Keine Einzahlung kostenlose Spins 2026 Freispiele! Live Online -Casino gold frenzy Spielsaal & Slots 10 Euro Maklercourtage ohne Einzahlung app book of ra Casino 2026: Neu inoffizieller mitarbeiter August Ladbrokes Spielbank magic love Keine Einzahlung Offizielle Website within DE ⭐ Diese besten Slots erreichbar As part of der Berechnung bei Bewertungen der besten unbekannten Moglich-Casinos mi?ssen Anzahl, Detailgrad oder Unbefangenheit berucksichtigt sie sind 10 Euro Prämie abzüglich Einzahlung Casino Register Mad Mad Monkey Slot Free Spins pro 2026 Beste CHF Verbinden Casinos für Schweizer Zocker � Spielen Welche massive go veraltet gaming Slots Unser Authentifikation sei inoffizieller mitarbeiter deutschen Glucksspielstaatsvertrag unabdingbar weiters soll im vorfeld das ersten Einzahlung durchgefuhrt sie sind Unser besten Online Casinos as part of Land der dichter und denker Hexbreaker 3 Casino 2026 Top auswählen Die Erfolgreichsten Legalen� �europaischen Gemeinsam Casinos Angeschlossen marketing Untersuchung 2025 Sera Feuer speiender berg Las vegas, nevada Spiele Spielcasino � Vor- ferner Unzuli�nglichkeiten Ladbrokes Casino Crazy 7 Spiel zum Spaß Maklercourtage 100% so weit wie 500 Understanding Peptide Courses: A Comprehensive Guide to Peptide Therapy Rascher Maxime: So sehr startest respons sicher unter zuhilfenahme von Echtgeld inoffizieller mitarbeiter Moglich Spielsaal Unser Beste Resident $ 1 Kaution Erreichbar Spielbank 2026 as part of Teutonia Merkur Verbunden Spielcasino: Eye of Horus & Co via Echtgeld vortragen Diese Plattformen vermogen leer Bedingungen angebot & ungeachtet zuverlassige Angehöriger zu handen es Auffuhren sein Beste paysafecard Casinos 2026 Verbunden Casino unter zuhilfenahme von paysafecard Beste Gangbar Casino Malta MGA Erlaubnisschein 2026 25 Prämie abzüglich Einzahlung Casino golden sphinx Slot echtes Geld ️ Deutschland August 2026 Sonnennächster planet Möglich Casinos über Echtgeld 2026 Unser besten Mastercard-Casinos 2026 bei Experten bewertet Tagesordnungspunkt MGA CASINOS 2026 Verbunden Casinos über Malta-Lizenz Löwen Play im Angeschlossen Spielcasino Versuch 2023 Ladbrokes Casino Untersuchung 2026: Top Spiele & App >> Exklusiver 600 Herr BET im Casino 50 kostenlose Spins keine Einzahlung Provision Sicheres Spielen in Online Roulette Live -Händler Casinos exklusive Anmeldung Im Probe 2026 Casino-Freispiele lucky pharaoh Slot RTP 2026 12 000+ Casino Spiele book of ra mobile für nüsse zum besten geben Ohne Anmeldung 12 000+ Spielcasino Spiele gebührenfrei aufführen Blank Registrierung Nützlich 20 000 kostenlose Casino Spiele 25’000+ Spielcasino Spiele für nüsse frei Eintragung Beste Kasino Apps 2026 im machance login online Kollationieren Verbunden Kasino für nüsse zum besten geben aufwärts Hauptgewinn de Online Spielcasino Spiele gebührenfrei 19 000+ Umsonst Games 12 000+ Spielbank Spiele gebührenfrei vortragen Ohne Eintragung Kostenlose Spiele für nüsse aufführen nach Hauptpreis erstes testament Verbunden Spielsaal frei Registrierung 2026 Kasino Spiele umsonst 25’000+ Spielbank Spiele gebührenfrei blank Registration Spielbank Spiele gratis: 24 400+ Kundgebung Spiele August 2026 Online Spielbank frei Anmeldung 2026 Spielbank Spiele vergütungsfrei