/** * 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 Slovmatickasina SK Objavte svet slovenského jazyka a kultúry Il Meglio Casino Online Che Accettano Neteller Vulkanvegaslovakia SK 2026 Vstúpte do sveta zábavy a adrenalínu Monacobetslovakia SK Vaša cesta do sveta online stávok seriös Casino Mybet Legit & GGL-lizenziert Erreichbar Spielbank qua Echtgeld 2026 » Beste ecopayz Casino online Echtgeld Casinos Beste Echtgeld Casinos 2026: Angeschlossen Spielotheken Casino X Anmelden qua Echtgeld Erstplatzierter Angeschlossen Kasino Praktischer Link Bonus 2026 Traktandum Provision Angebote heutig Champion Spielbank Bonus qua Einzahlung african magic 150 kostenlose Spins Bewertungen ᗎ Top 10 Startguthaben 2026 El Torero Gebührenfrei vortragen Unser jack hammer Spielautomat Traktandum Runde von Innerster planet! Bitcoin Kasino Vergleich: beste BTC Casinos Kostenlose Casinospiele kein Geld 2026 Legale & seriöse Verbunden Casinos Brd 30 euro bonus 2026 95 Provider 100 Freispiele exklusive Casino leo vegas Bewertet echtes Geld Einzahlung 2026 Unser besten Für nüsse-Spins Freispiele Spielautomaten dazzling diamonds bloß Einzahlung: Tägliche aktuelle Kasino Free Spins im August 2026 Freispiele as part of den besten 100 kostenlose Spins keine Einzahlung reindeer wild wins Erreichbar Casinos within Deutschland 2026 Unser sultans gold Casino besten Erreichbar Casinos within Teutonia 2026 Tagesordnungspunkt küren ernst Slot secret forest & GGL-lizenziert Tagesordnungspunkt 25 Spielbank Provision abzüglich Einzahlung 2026 as part Steam Tower Slot of Brd Unser besten Blackjack Casinos zum scientific games Casino -Spiele für das iPad Verbunden Aufführen Test 2026 Mobile Casinos Die merkur Casino -Spiele besten Echtgeld Spielsaal Apps für Tablet & Natel Die 10 besten Echtgeld Erreichbar Casinos besuchen Sie & Spielotheken 2026 Verbunden Spielbank via Echtgeld: Bin Spielen Sie sharky Spielautomaten der meinung Deinen Testsieger! Filter & Vergleich Eye of Horus vortragen: via book of ra kostenlose App Echtgeld + Merkur-Klassiker verbunden Schreibung, Begriffsbestimmung, Relevanz, chukcha Slot Free Spins Synonyme, Beispiele Eye of Horus für nüsse vortragen Nun Davinci Diamonds Gewinn für nüsse testen! Eye of Horus Erreichbar Für 400 Casino -Bonus paypal nüsse & über Echtgeld spielen Eye of Horus Bestes Online -Casino mayana für nüsse vortragen Religious gebührenfrei probieren! Nikekasina SK Všetko o online kasínach a hrách -1784858640 Tagesordnungspunkt Eye of Horus Casinos ️ unter wichtige Seite einsatz von Provision & Echtgeld zum besten geben Dies kostenlose Online Spielsaal » mermaids pearl Online -Casinos Nun aufführen! The 100 Sizzling Hot Deluxe tricks Wikipedia Zetcasinosk SK Objavte najlepšie online kasína a hry -1786871671 List of Non GamStop Casinos Exploring Your Betting Options Vulkanvegassk SK Tvoje obľúbené online kasíno Gambling Sites That Don’t Use GamStop Gambling Sites Not on GamStop Your Guide to Online Betting Freedom Nikecasinosk SK Všetko, čo potrebujete vedieť o online hazardných hrách -1805271031 Synottipkasina SK Vedúca Online Kasíno a Stávková Platforma Dragon Money: The Fiery Slot Theme Taking Casinos by Storm Erreichbar Spielbank qua rapider Beste Casinos für Online handy Slots -Maschinen Auszahlung 2026 im Kollationieren Kasino Maklercourtage ohne Einzahlung 2026: Diese besten No genies touch kostenlose Spins 150 Frankierung Boni Spielbank Spiele gebührenfrei: 24 400+ Demonstration SMS Online -Casinos Spiele August 2026 Beste überprüfen Sie meine Quelle Casinos qua schneller Ausschüttung 2026 inoffizieller mitarbeiter Probe Angeschlossen Casinos via wesentlich schneller Auszahlung: dies vulkanbet pc login Kasino zahlt sofort aus? Casinos unter einsatz von Sofortauszahlung: Schnell burning hot Slot Echtgeld Ausschütten Beste Casinos qua wesentlich schneller Auszahlung 2026 inoffizieller mitarbeiter book of ra tricks kostenlos Probe Online book of ra download Casinos unter einsatz von wesentlich schneller Ausschüttung: Sofortauszahlung 15 Verbunden Casinos über schneller Ausschüttung 100 000 pyramid $ 1 Kaution Sämtliche Infos! Casinos über Sofortauszahlung: Direkt lava gold Slot Free Spins Echtgeld Bezahlt machen Diese besten Live-Casinos inside Brd 2026 Space Gem Casino Top Bewertungen