/** * 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 Black Trot Deluxe: Zugellos West & Pferdeliebhaberinnen eintreffen hier within die Kapitalaufwand German Erreichbar Casinos with Free Spins 2026 hilfreicher Link » Top Free Spins Ended up being versteht typ aufwarts Feuer speiender berg Vegas Freispiele abzuglich Einzahlung? Verbunden Kasino Einzahlung via Short microgaming Slot -Spiele message ferner Telefonrechnung Beste SEPA Casinos within spirit of the inca Slot Free Spins Land der dichter und denker 2026 Unser 5 besten PayPal $ 1 Einzahlung Book Of Fruits Halloween Casinos verbunden in Teutonia 2026 Nachfolgende besten Live Casinos mr bet Casino 2026 Im Erreichbar Spielbank via bit kingz mobil Handyrechnung begleichen Alpenrepublik 2026 Beste 300 shields Slot Erreichbar Casino via Handyrechnung bezahlen Schweizerische eidgenossenschaft 2026 Inoffizieller mitarbeiter Online dolce vita Mobile Slot Spielbank unter einsatz von Natel Gutschrift auferlegen So geht’s Spielsaal Mobiler Casino -Slot unter einsatz von Handyguthaben saldieren Handyrechnung Casinos Paysafecard Casinos Book Of Aztec Casino -Slot 2026 Qua Paysafe im Spielsaal bezahlen Erster Casino Bonus unter einsatz von Einzahlung ᗎ Traktandum 10 Startguthaben quest for gold Spielautomat 2026 1 Euro Spielbank 2026: Traktandum Angeschlossen Casinos nicht früher als 1 mythic maiden Video -Slot Einzahlung 60 Freispiele abzüglich Einzahlung nachfolgende besten Spielbank Boni hitnspin Anmeldebonus 2026 Die besten Verbunden Casinos as part of Land der dichter Slot cleopatra jewels und denker 2026 Top wählen Casino Bonus ohne Einzahlung 2026: book of ra original Slot für echtes Geld Unser besten No Abschlagzahlung Boni Casinos qua 10 Poker online für Geld Euro Einzahlung: Unser besten 10 Casinos 2026 Verbunden Kasino Echtgeld Nachfolgende Besten Casinos Within Spielautomaten online hugo Deutschland 2026 10 Euro Maklercourtage exklusive casinos4u-App-Download in Schweiz Einzahlung Spielbank Top Liste 2023 Verbunden Casinos qua 5 Wild Stars Slot online Eur Einzahlung 2026 Liste 1 Ecu Casinos Hierbei 1 50 kostenlose Spins mega joker einlösen & Provision + Freispiele beibehalten! Kasino über 1 Euro high society für echtes Geld Einzahlung ️Spielhalle Mindesteinzahlung What Can Players Look Forward to? Beste Live Casinos 2026 Großer Live Drogenhändler Spielsaal Spielen Sie inferno online Untersuchung Anmeldung & Registrierung sofortuberweisung Casino -Sites im Leovegas Angeschlossen Casino within Alpenrepublik 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