/** * 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 Spielbank Provision bloß Einzahlung 2026 No Vorleistung Bonus Beste Angeschlossen Spielhalle: 125 Freispiele erst als 1 Einzahlung 100% dem recht golden egypt Slot Free Spins entsprechend 完全に無料のギャンブルゲーム カジノゲーム あなたは間違いなく大金を払うことができます 本当の収入 Thunderstruck On the web Demo Gamble Ports 100percent free Deutsche Erreichbar Casinos 2026 » Untersuchung & Abmachung unter einsatz von GGL-Lizenz Prämie exklusive Einzahlung bankueberweisung Casino -Bonus Brd Deutsche No Abschlagzahlung Provision あなたはドルです ウィキペディア Kamagra Oral Jelly – Wie einzunehmen Online Casinos über hoher Auszahlungsquote Top Versorger & RTP £15 100% 無料の入金不要ボーナス 2026 年の英国プレーヤーへの販売 Inactive Or Alive Position On the web Play for 100 percent free Wikipedia, the free goldbet Slots Promo Code encyclopedia ドラゴンダンシングオンラインスロットを100%無料でプレイ、またはExtra Echtgeld-Casinos within Österreich 2026 Seriös unter anderem Unter allen umständen Beste Verbunden Herr Bet 30 Casino Free Spins Deutschland Casinos Land der dichter und denker Juli 2026 100回の無料スピン(入金不要ボーナス) 100回の無料インセンティブスピン Kunde leer Bundeshauptstadt Star Joker $ 1 Kaution und Brandenburg Beste Erreichbar Casinos Land der dichter und denker: Tagesordnungspunkt Casino Seiten 2026 Free Slots Canada Play 39,712+ Position Demos Zero Down load Neue Angeschlossen Casinos inca gold 2 Online -Slot -Bewertung 2026 Traktandum Anbieter im Test Neue Westfälische: Quelle des Artikels Aktuelle Meldungen aus OWL Diese besten Verbunden Spielsaal Bonus Ultra Hot 120 freie Spins Angebote 2026 Finest On the web Position Gambling enterprises in america: Finest Position Websites to own 2026 Erreichbar Kasino Freispiele bloß Einzahlung Gratis Free Spins an dieser stelle! Unser besten Casino zodiac Bewertung mobilen Casinos within Brd 2026 誤解の中のドラゴンから離れた簡単な歴史と民話 Celebrity Trip Position: 100 percent free Revolves, Demonstration and Info Ganz ProSieben Sendungen battle maidens cleopatra Gewinn within Joyn Mediathek & Live-Stream Casino Maklercourtage exklusive Einzahlung No Anzahlung Bonus Spielbank Mobilfunk-Aufsicht Yahtzee kostenlose Spins keine Einzahlung Dolphins Pearl 高級オンライン カジノの賭け金は 100 パーセント無料 Mobile Casinos 2026 Unser 10 Beste Handy erste Seite Casinos in Brd Neue Provision Codes für jedes Casinos abzüglich Einzahlung im July 2026 » Sphinx Slot machine Marokko Königreich norwegen book of ra freispiele sound Tipp, Prognose & Quoten 07 06.2026 Eye of Horus » Kostenlose Demonstration & unter einsatz von Echtgeld aufführen Eye of Horus Slot: Spiele damit Echtgeld & gratis ウィリアム・スロープの最高のポートでトップセレクションを試してみてください。2026年以内に Southern area Playground check out show online streaming on line Freispiele Drücken Sie jetzt den Link ohne Einzahlung Juno 2026 Brucebetdanmark DK – Det officielle 172313453 Casinoandfriendsspil DK – Det officielle site for spil og underholdning 169847765 Dolphin’s Pearl Slot オンライン ゲームのデモプレイと完全無料のリボルブ Legale Online Casinos: Auf jeden fall zum besten geben in geprüften Anbietern Genius From Opportunity, Self-help guide to Web based casinos and Gambling games PayPal Spielbank Verkettete liste 2026: Tagesordnungspunkt Online Casinos unter einsatz von siehe PayPal Einzahlung Slotomania Best 5 ゲーム中にウェブ上で最高の 100% 無料ポートをプレイしましょう Greatest Christmas Gambling enterprise Incentives and Next Christmas time Harbors 2025 Die besten Online Casinos as part of Land der dichter und bananas go bahamas Slot für Geld denker im Kollationieren 2026 Kasyno Online Na Prawdziwe Pieniądze Ranking Legalnych Kasyn