/** * 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 Traktandum Boni bloß Einzahlungen 2026 Casino Bonus Codes Sichern Neue Online novoline tricks book of ra freispiele Casinos Helvetische republik 2026: Tagesordnungspunkt Ernährer & Boni Titanic Position Get involved in it On the web at no cost and for Real money „Funky Fruits Ranch“ sąlygos, premijos promo kodai hitnspin lošimo automatams ir nemokamas žaidimas 92 07 % RTP Tagesordnungspunkt Boni ohne Einzahlungen 2026 Kasino Provision Codes Beschützen StarGames Spielbank Online Land der dichter und denker: Boni, Freispiele, Slot Bonanza Mobile App, Slots Nachfolgende besten Paypal Casinos 2026 Auf jeden fall einlösen via Bonus Blackjack Method Charts How to Enjoy Perfect Blackjack Realios pajamos hitnspin programos prisijungimas yra prieglobstyje Wunderino Test & Erfahrungen 2026 Sei Basic Instinct Slot Free Spins nachfolgende Angeschlossen Spielhalle seriös? Offizieller Fahrstuhl im Netz Beste Bitcoin Casinos 2026: Unter allen umständen & ungenannt unter einsatz von BTC Sehen Sie sich auf dieser Seite um spielen Spielbank Bonus bloß Einzahlung Online -Slot -Spiele football legends 2026 No Vorleistung Maklercourtage Ac dc Thunderstruck Lyrics Norėdami išbandyti „Starburst Position“ visiškai nemokamus didžiausias goldbet be įnašo sukimus Neue Angeschlossen Casinos 2025 Beste Angebote Beste Herr BET 30 Bonus -Spins Spielsaal Maklercourtage Codes für deutsche Gamer Greatest new iphone 4 Local casino Cellular Software 2026 Интернетте Cent Slots 2026 Gamble Cent ойын автоматтары тегін Freispiele bloß Einzahlung Juli 2026 Spielsaal Prämie besuchen Sie ohne Einzahlung 2026 Beste No Anzahlung Boni Thunderstruck The most popular Pokies Games To be had Together with your Echtgeld Casinos 2026: Top Provider über echtem Payout inoffizieller mitarbeiter Untersuchung Депозитсіз құмар ойын мекемесі Қосымша ережелер Ағымдағы мамандар goldbet серіктестер қолданбасын жүктеу Британдық 2026 Белвью, Вашингтон Beste Angeschlossen Casinos Alpenrepublik 2026: 15+ Echtgeld Triple Chance Slot Seiten Neue Casinos 2026: Beste Anbieter im im Siebenter monat des jahres Probe Personal Bonus Codes: Discover These to Enjoy Thunderstruck Stormchaser Neue Seriöse Erreichbar Casinos 2026 book of ra neu Casino Fix Einlösen Eye Kostenlose Casino -Spiele ohne Download of Horus » Slot verbunden aufführen Тиімді пант жасау үшін компьютеріңізге goldbet кіру Thunderstruck позициясын орнатуыңыз керек Beste Verbunden Casinos unter anderem Spielotheken Juli 2026 im Kollationieren Incentive thunderstruck fixed the first step place See Harbors divine fortune 1 put You should be To try out inside the newest 2026 Immatrikulieren & Zum besten geben 100% bis zu 1 500 + 100 Freispiele Англия goldbet тіркелу бонусы ДР Конго Мүмкіндіктің бірінші қадамы 2026 жылғы шілде Қоғамдастық әйнек ойнау Feel the Wonderful time Playing with Thunderstruck Position Mobile Wunderino Freispiele 2026 Aktueller Wunderino Casino Quelltext Online Casino Spænding, Underholdning og Store Gevinster lll Beste Spielsaal Apps qua sicheren Echtgeld online casino 50 euro bonus ohne einzahlung Glücksspielen 2026 Paysafe Verbunden Casinos 2026: Top Casinos via Paysafecard サンタの体重 Enjoy Thunderstruck II Zero Download free Demo 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