/** * 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 Mobiilsed slotid ja hasartmängud Online kasiino Fruit Pay kümme mängusaiti, millega Fruit Shelliga tegeleda Tarkkaile kotiutuksesi tilaa Preferences Central Malina Casino Met en place Settings Hub for France Démarrer au vidéo poker Points Fondamentaux sur les Possibilités de Dépôt Minimum au Casino Mode d’emploi les codes bonus chez Nine Casino Online slotid: naudi lõbu pärast hitnspin boonuskood Eesti 2026 kohalikke kasiino slotimänge Better Positioni Rakenduse goldbet APK allalaadimine rakendused 2026 Better Cellular kasiino slotimängude rakendused Від плану до перевіреної публікації — 085 Netelleri hasartmängufirmad Parimad mängusaidid Üks uus sissemakseta goldbet online kasiinodele Neteller Härra Valik: Parimad kasiino sissemakseta vulkan spiele Krüpto Kohalikud Kasiinoboonused, Sissemakseta Tasuta Revolve'id Parimad Las Vegase, Nevada kasiinod internetis, millel on 2026. aastal Promokoodid vulkan spiele kasiinole turvalised kasiinode saidid Nevadas Parimad USA-s $1-astmelise ice casino boonus minimaalse sissemaksega kasiinod, mis avatakse 2026. aastal Parimad videopokkeri ice casino jackpot kasiinod USA-s 2026. aastal 2025. verde casino registreerumisboonus aastal Lucky Days Casino Erprobung LuckyDays Maklercourtage 1000 + 100FS Lucky Days Spielsaal: 1 000 Euro Provision & 100 Freispiele Dunder Ein große Dunder Spielbank Probe 600 Prämie + 200 Freispiele Mycasinofreunde de Kasino Vergleich » Nachfolgende besten Online Casinos 2024 Ladbrokes Kasino Erfahrungen 2026: 50 Prämie & 100% Zugelassen Beste Echtgeld Casinos 2026: Verbunden Spielotheken via Echtgeld App nach iOS und Androide herunterkopieren Happy Cherry kasiino mängu online sissemakseta goldbet kommentaar BetMGM Expertenbewertungen Spielbank Schleswig-Holstein 4x noch mehr Spielkultur Kostenloser Spielautomat Teutonia über RTP & Features El Torero Slot-Game Flamenco-Feeling in angewandten Glätten Erreichbar Spielsaal Test 2026 ️ 215+ seriöse Casinos inoffizieller mitarbeiter Abmachung Echtgeld-Casinos as part of Österreich 2026 Vertrauenswürdig ferner Auf jeden fall ᐉ Provision 2026 Erfahrungen ferner Probe Expertenbewertungen Spielsaal Bonus bloß Einzahlung Häufig gestellte fragen 2025 Fragen unter anderem Beantworten Kasino Bonus abzüglich Einzahlung Übersicht: Jedweder Willkommensbonus Angebote pro Verbunden Casinos abzüglich Einzahlung inoffizieller mitarbeiter August 2026 sofortig einsehen Taschentelefon Spielsaal Echtgeld Bonus ohne Einzahlung 2026 Maklercourtage bloß Einzahlung Deutschland Deutsche No Abschlagzahlung Prämie Freispiele abzüglich Einzahlung 2026 100% Kostenfrei & Auf anhieb Dunder Spielbank Prämie Codes No Abschlagzahlung 2026 Freispiele bloß Einzahlung Dunder Spielbank Bewertung, Prämie unter anderem Erfahrungen Dunder Spielbank Erfahrungen 2026 250 prämie + 120 Freispiele Dunder Kasino Erfahrungen 2026 250 provision + 120 Freispiele Casino Provision bloß Einzahlung 2026 » Traktandum No Frankierung Boni StarGames Provision Quelltext Juno 2026 Aktueller Provision für neue Gamer Angeschlossen Casino Prämie abzüglich Einzahlung 2026 Sofortig & Originell! Beste Casinos ohne Einzahlungsbonus within Teutonia 2026 Vollständige aktualisierte Verzeichnis Wunderino Bonus Quelltext & Erfahrungen Elvis: Το νέο σχόλιο για το slot Queen Lifetime WMS- Αισθησιακό ή μήπως όχι; Beste Erreichbar Casinos 2026 220+ geprüfte Casinos inoffizieller mitarbeiter Vergleich Dunder Casino Test 2026 600 Maklercourtage & Freispiele Dunder Spielsaal Erfahrungen 2026 » Sei Dunder Spielbank ernsthaft?