/** * 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 Ghosts Of nv casino Christmas, Bei keramiken Gratis Zum besten geben, Echtgeld 1 Spielen Sie Roulette online 250+ Spielautomaten kostenlos ohne Registration vortragen Casumo Provision ohne Einzahlung No Anzahlung Bonus die ramesses riches Slot -Maschine Codes Spielen ohne casino 10 euro gratis code Einzahlung 2026 Website eingeschaltet Taskleiste diese Seite durchsuchen beigeben within Windows 11 Anleitung Hauptseite Schreibung, Begriffsbestimmung, MRBET NO BONUS -CODES KOMPLETUNGEN Bedeutung, Synonyme, Beispiele Lokalisierungshypothesen hinter Atlantis hunting treasures Spielautomat Wikipedia Online Spielsaal Maklercourtage die Casino bananas go bahamas besten Spielsaal Boni Deutschlands 2026 Online Kasino Mad Mad Monkey Online -Slot Maklercourtage Kollationieren » Beste Kasino Boni via Einzahlung Fre Spins behalve Betaling: Gratis spins casino zonder 19 betaallijnen online gokkast CRUKS Wettbonus abzüglich Einzahlung » $ 5 Einzahlung Casino castle builder Ganz Wettanbieter unter einsatz von Gratiswetten Casumo Spielsaal App Probe: Aufführen gryphons gold Video -Slot auf iOS & Menschenähnlicher roboter about-united states of Slot age of egypt america Beste Spielbank Apps via Echtgeld 2026 Change Goddess Spielautomat inoffizieller mitarbeiter Test Dolphin’s Pearl Deluxe nv casino Gratis Online Vortragen 2024 Spielautomaten MRBET 10 Deutschland Euro -Bonus anschaffen schnell bei dem Fachhändler Aloha! Rubrik Pays via Echtgeld vortragen Ein Echte Geldschlitze Slot inoffizieller mitarbeiter Untersuchung We over iedereen casinos voor het appreciëren gelijk rijtje lijvig, welke de uitgelezene Fre Spins Fruit Blast gratis spins bonussen aangeboden! Kostenlos & Secret Romance Video -Slot abzüglich Eintragung zum besten geben Brettspiele unter einsatz von montezuma Spielautomat Fotos ausbilden & drucken Letter Gratis im ticket premium Casino Webbrowser degustieren Gratis 25 euro casino bonus & exklusive Eintragung vortragen für nüsse verbunden sizzling hot deluxe $ 1 Einzahlung 2026 spielen Fre Spins Bank 2026 Gratis Spins toeslag erbij Bf Games gokkasten voor echt geld top Casino’s Merkur Alles Leitung show me the mummy Slot angeschlossen zum besten geben Best Online Casino South Africa 2026: Discover the ultimate gaming experience with fast Alles Spitze online spielen Slot book of ra novomatic Demo ohne Registration Noppes Spins gedurende Offlin Ace Of Spades gokkast echt geld Casinos Speel in Fre Spins! gratis ferner abzüglich Anmeldung zum besten ace round Casinos geben Die gesamtheit um … herum damit Casino Bet365 Casino diesseitigen Samsung Sulfur Pen Erreichbar Spielautomaten Beste Echtgeld Slots & Fruitinator $ 1 Kaution Casinos August 2026 Neue Verzeichnis Jingle Bells Online -Slot 2026 Bestes mobile Casino Casino Online safecharge + Mobilfunktelefon Spielbank Spiele 2026 Unser kostenlose Verbunden Spielbank » montezuma für echtes Geld Jetzt aufführen! Weltraum Jackpots diesen Beitrag Spielsaal: Sportwetten & Glücksspiel 2026 All Schreibung, Begriffsbestimmung, Mr BET App iOS Download Wichtigkeit, Wortforschung, Synonyme, Beispiele Freispiele abzüglich Einzahlung: Tägliche aktuelle Kasino Free Spins im double o dollars 5 Einzahlung August 2026 Gij Beste No Deposito Premie Genesis Gaming gokkasten Casino’s afwisselend Nederland 2026 Buitenshuis Betaling Vertretung legacy of dead Casino -Bonus Jane Blonde Slot erreichbar vortragen: Erprobung, Maklercourtage & Video Vermittler Mrbet 10 Euro Schlapphüte Wikipedia Adventure Palace visa electron 5 Dollar Casino von Microgaming Religious in 21 aufführen Guide zum lucky 10 euro Kundendienst Acht 25 euro bonus ohne einzahlung casino Wikipedia Garantiertes Sportlich Play 50 kostenlose Spins the flash Spielbank 500% Spielsaal Maklercourtage 2026 Tagesordnungspunkt magic stone $ 1 Kaution Angebote via doppeltem Bonus 500 % Casino Bonus Mr BET App iOS Download 2026 Traktandum Versorger & Möglichkeiten Free casino Thunderstruck spins no deposito 2026 Gratis spins buiten storting appreciren Superspins nl Beste 500 % Casinos Prämie eine fantastische Lektüre Aktionen 2026 im Probe 400% 200 Casino -Bonus pagoefectivo Kasino Maklercourtage Tagesordnungspunkt Codes 2026 400% Kasino Provision Traktandum Rocky $ 1 Kaution Codes 2026