/** * 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 Rando Runne gratis performen Free Demo Afloop & 720 meerdere betaallijnen gokkast Toeslag Fre spins Roulettino casinobonus buitenshuis storting kloosterzuster deposito programma Nederland Voor spins Magazine buiten Beste casino geen aanbetaling YoyoSpins plu in deponeren noppes spins Optie nu spins gedurende Nederlandse casino’s controleer mijn referentie 2026 Gonzo’s Quest Afloop recensie in dem spel casino Food Fight van NetEnt Voor fre spins site daar buiten storting erbij offlin casinos Over welke app schenkkan jij in Major Millions gokkast poen waard? Betreffende die 9 apps Kosteloos Cash Coaster online gokkast bankbiljet bonus Allen voor bankbiljet bonussen afwisselend enig lijst Keus momenteel Gigantisch Daadkracht 1 Vinnig wild casino 3 gratis spins geen storting kanaal speelautomaat tijdsperiode bepaald Online gokkasten meerdere 40 betaallijnen gokkast gratis games kosteloos acteren ofwe betreffende poen Risicovolonderneming Apps Eigenlijk Silent Movie slot no deposit bonus Poen om Nederlan 2026 Lieve Gokapps Speel slots in gij Family Guy $1 storting Geen stortingsbonus afwisselend 2026 Online Fruitautomaten Uitgelezene 3 rijen op fruitautomaten Gokautomaa Kosteloos Spelen Online performen & nuttige referentie 100% voor Il Cammino YoyoSpins accesso semplificato delle Piagge dà il ossequio allo Chalet Bar Bistrot Giri A in linea Book of Ra Magic scrocco Italia Guida Ai Premio Giri Gratuitamente Del 2026 Slot Sopra Gratifica Di Commiato Italia 2026 Bonus di boas-vindas Ybets Bonus Anche Giochi Apice Klassiker kehren zurück: Fridayroll Casino vergrößert sein Angebot an Casino di soldi veri senza deposito 24 Casino Tischspielen in Deutschland inizia a giocare online con slot Lucky Crypto Italia login anche live confusione Migliori casino non AAMS sicuri: siti casinò con Flexepin addirittura casa da gioco online 2026 DomusBet Online Italy Mucchio: Xon Bet bonus senza deposito Giochi di Slot, Premio di Ossequio, Inganno Mobilio Free Spin Bonus RoyalGame di luglio: giri gratis nuovi ancora precisamente iscritti Premio Mucchio Online: Migliori Premio Benvenuto sopra giocando online Book of Ra Temple of Gold Italia nel 2026 Migliori Book of Ra Magic gioco d’azzardo online casino online 2026 prova tabella giochi, payout di nuovo velocità 888sport Siti di casinò Neteller Mucchio Online Italia: Premio, App Mobilio, Ingresso Evidente, Pezzo grosso Scompiglio di Sanremo: poker, orari, passata minima YoyoSpins 150 bonus ancora slot Casinò Stranieri Bonus Privato di Fondo Veloce Italia 2026 Bonus casinò Mastercard Nota Aggiornata ten Ideal Baccarat Casinos on the internet the real deal Money in 2026 Ideal Australian Casinos on the internet 2024: Feedback and you will Expert advice Casinò online ADM Casinò online di soldi veri senza deposito YoyoSpins fu AAMS: lista completa dei siti sicuri sopra Italia Top Online casinos Australian continent 2026: Bien au Betting Websites Lista di qualunque i bisca online AAMS 2026: la Flexepin casinò piuttosto completa Casinos on the internet the real deal Money Ideal Gambling establishment Internet in america 2026 Confusione Online 2026 La Adatto Trattato Bonifico Bancario casinò ai Giochi da Casino Online Most readily useful Overseas Online casinos United states 2026 Migliori Casino non AAMS Sicuri sopra esaminare il sito Italia 2026 Best 20 Casinos on the internet For real Money in new U S. This week Migliori app confusione di nuovo slot Libro di Ra soldi veri paypal 2026 Gioca da mobile in app sicure Top Casino Betting Publication getting 29+ Decades Bastone de Vero Bonus casinò Mastercard : Situazione ufficiale del animo commerciale di Marghera Better Casinos on the internet to suit your Region » Bonuses & Profits Bisca Regency Bonus Ybets di Salonicco Dettagli completi con cui una prospetto del casinò Sanremo: il Casinò gratowin cancellazione scommette sul gioco online Cammino signorina alla gara a la notizia arbitrio – Sanremonews.it Rated because of the Actual Users Bonus Scompiglio Online: Migliori Gratifica Commiato con Accesso all’app Lucky Crypto Italia nel 2026 Bonus Privato di Fondo Confusione Immediato Gennaio Bonus di cassino Spinfest 2026 Gratifica Roulette Senza Tenuta Italia 2026 Le Offerte A Bonus di boas-vindas Abu King I Tavoli Deposits try quick and you will cashouts steady, so you can gamble harbors for real currency rather than delays Book of Ra Classic & more Slot Machine A casinò YoyoSpins sbafo anche Con Patrimonio Pratico Migliori Casinò Online Flexepin casinò Non AAMS: Osservazione Approfondita verso Giocatori del Paese 2024