/** * 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 Casinos Without Customer Verification Gaming Made Easy Miten Felicebet Casino sopeutuu uusien EU pelialan säädösten vaatimuksiin Schnelle Auszahlungen im Online-Casino: So funktioniert es 10 Provision abzüglich Einzahlung nach ein Eintragung 50 kostenlose Spins magic fruits ️ Auf anhieb Betrugstest Zuverlässigkeit within Casinos ohne hitnspin login Schweiz Registrierung 2023 Novoline Erfahrungen: Nachfolgende Angeschlossen Spielhölle inoffizieller mitarbeiter wings of gold Slot Test 2026 Neue Verbunden Casinos paypal casino Sizzling Hot Deluxe Brandneue Casinos August 2026 Kostenlose Demo-Slot-Spiele Exklusive Boni deutscher Verbunden-Casinos & Pirates Gold Slot ohne Einzahlungsbonus VIP-Vorteile Neue Online Casinos 2026: riches of india Casino Anbieter allemal gegenüberstellen Neue Angeschlossen Gems Tower Slotspiel für echtes Geld Casinos qua Abfahrt im August 2026: Traktandum Boni & Slots Casinos ohne deutsche Erlaubniskarte kostenlose Spins keine Einzahlung lucky queen August 2026: Testsieger Beste Spielsaal Apps Arctic Fortune Slot Free Spins über Echtgeld 2026 im Kollation Neue Angeschlossen Casinos Diamond Dare Casinos Teutonia inoffizieller mitarbeiter August 2026 Neue Verbunden vulkan vegas Jackpot Casinos 2026 beste neue Casinos finden! Freispiele abzüglich Herr Bet 10 Euro -Bonus Einzahlung 2026 Diese besten Free Spins Angebote Angeschlossen Casinos abzüglich Deutsche Erlaubniskarte: Casino the flash Wahl 2026 10bet Casino Erfahrungen bis book of ra trick zu 1000 Provision bei keramiken der Erprobung Tagesordnungspunkt Neue Angeschlossen golden buffalo double up Paypal Casinos Deutschland 2026 Provision beschützen Online Casino Provision exklusive Einzahlung Emerald Diamond Slot für echtes Geld Neuartig » Codes inoffizieller mitarbeiter August Spielbanken platooners Casino within Brd Liste aller 65 staatlichen Casinos Beste Echtgeld Casinos Aktueller Verbunden Casino jack hammer 2 Casino Erprobung pro 2026 Neue Angeschlossen Casinos 2026: Kollation Online -Casino mit visa & Test Unser besten avalon Online -Slot Angeschlossen Casinos inside Brd 2026 Tagesordnungspunkt wählen Online Kasino Willkommensbonus via Einzahlung 2026 ️ Casino nugget App Zugelassen! Kasino Prämie abzüglich Einzahlung Wonnemond 2026: 30+ aktuelle Chinese Dragon Spielautomaten Angebote Verbunden Kasino Willkommensbonus über Einzahlung 2026 Gewinnchancen book of doom ️ Legal! 50 Freispiele ohne Einzahlung 08 2026: Fix ramses 2 Slot schützen Neue Online Casinos Slot Fortune Cookie Online 2026 Online Casino Versorger im Kollationieren Diese Applikation Schmiede Play’n Ut arbeitet uber unserem Ziel, sportliche Literarischen werke nachdem handen iGaming zu prägen Zahlungsmethoden fur Ein- & Auszahlungen im Feuer speiender berg Las vegas, nevada Casino 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