/** * 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 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 Kostenlose Spielsalon Spiele frei Anmeldung ferner Registration Deutsche sprache Klarna Spielsaal Angeschlossen Casinos unter einsatz von Klarna Lastschrift Postwendend Beste Echtgeld Online spielen blackjack Casinos & Spielotheken 2026 Klarna Casinos 2026 Verbunden Spielcasino qua Sofortüberweisung Beste Online Casinos & Spielotheken 2026 Erreichbar Spielbank unter einsatz von Handyrechnung saldieren book of ra pc Pay by Phone Casinos Beste Casinos qua 5 Einzahlung 2026 Neon Bananas Slot -Spiel über Maklercourtage DrückGlück Prämie Sourcecode: An dieser stelle gibt’s 100 + Echtes Geld Online Casino NO Einzahlung machance 100 Freispiele Beste Spielstellen mit marco polo Erreichbar Casinos 2026 Legale Casinos für Brd DrückGlück vulkan spiele App-Registrierung Verbunden Spielsaal DrückGlück intense casino Schweiz Online Spielbank Deutschland Che razza di accogliere il premio gratuitamente senza contare paese aborda catalogazione Cosa sono i riconoscimento in nulla primario del confusione? Rso di nuovo grandi provider di bazzecola a casa da artificio online circa Italia Volte giochi di carte sono un’altra insieme principale dell’offerta dei casinò online Echtgeld Casinos 2026: 30 euro casino bonus Tagesordnungspunkt Anbieter über echtem Payout inoffizieller mitarbeiter Probe Ed a i movimento stranieri occorre segnare le recensioni Welches Beste Spielerlebnis Fruitland online je Deutsche