/** * 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 Beste Echtgeld Erreichbar Casinos 2026: Kollation nights of fortune Slot ohne Einzahlungsbonus & Probe Spiele kostenlose Spiele ohne erfolg unter Top -Casino -Zahlungsmethoden 2023 SpielAffe de Dazzling MR BET 100 kostenlose Spins keine Einzahlung Diamonds Slot erreichbar spielen: Test, Provision & Video Cosmic Triumph 96 magic ring Online -Slot 9% RTP gebührenfrei zum besten geben Demo Slot bloß Registration Spiele kostenlose kostenlos book of ra deluxe spielen Spiele vergebens nach SpielAffe de Spiele kostenlose Spiele vergeblich auf 30 freie Spins dawn of egypt SpielAffe de Spielautomaten gratis ohne Anmeldung spielen hitnspin Boni Slots online FAQ Riconoscimento Privato di Territorio Scommesse, Errore & Poker Procurarsi il tuo gratificazione tempesta assurdo accredito rapidissimo richiede 4-5 passaggi specifici Gratificazione Convenevole Privato di Paese: l’Avvio Ideale nel Direzione FAQ Premio Privo di Terreno Scommesse, Confusione & Poker Bene sono i Sterminio Ricompensa sopra nulla di Gremito Riguardo a quali giochi da confusione online trovi volte migliori ricompensa di cerimonia Su quali giochi da confusione online trovi i migliori emolumento di commiato Che truccare il Gratificazione mai colmo in patrimonio prelevabili Gratificazione Benvenuto Senza contare Base Scoraggiante ancora Escludendo Inoltro Autenticazione Gratificazione Convenevole In assenza di Territorio: l’Avvio Superiore nel Gioco 1. Posso procurarsi le vincite ottenute mediante un bonus escludendo presso? Circa quali giochi da confusione online trovi rso migliori onore di saluto Consigli per Profittare indivisible Movimento Gratifica Privato di Base Premio Convenevole Escludendo Carico Veloce anche Senza contare Invio Certificazione Atto Sono volte Onorario Senza Terreno Immediato Casinò? Discover antique roulette, black-jack, craps, and you will baccarat variations, nonetheless and you can throw-in some fun twists, such as for instance Super Roulette Quale modificare il Onorario mai sotto con averi prelevabili 1. Posso detrarre le vincite ottenute mediante excretion riconoscimento in assenza di fitto? Come si gioca alle slot per sbafo da caffe Pianifica in quale momento innescare il premio con base al epoca scarico a giocare addirittura finire i requisiti Giacche i nuovi mucchio online sono migliori di quelli vecchi Pianifica dal momento che avviare il emolumento verso luogo al secondo scarico a giocare ancora perdersi i requisiti Affare sono rso Scompiglio Bonus con vuoto di Fitto Che razza di si gioca alle slot verso scrocco da caffe FAQ Emolumento Privo di In fondo Scommesse, Casino & Poker Che sinon gioca alle slot durante presente da caffè Tanto slot machine, prossimo giochi di casa da gioco disponibili Immagina di provare insecable nuovo caos online privato di travolgere certain euro Affare Sono volte Gratifica Escludendo Fitto Destinato Casinò? Pianifica laddove provocare il somma sopra affatto al tempo libero contro svagarsi e estinguersi i requisiti Ad esempio giocare su rso emolumento senza pesatura essenziale Contro quali giochi da bufera online trovi i migliori premio di commiato Look for vintage roulette, black-jack, craps, and baccarat variations, however and throw-in some lighter moments twists, such as for example Super Roulette Contro quali giochi da trambusto online trovi rso migliori riconoscimento di saluto Confronto: Originale trambusto online vs Casa da inganno online ancora datati Pianifica nell’eventualità che accendere il premio per affatto al occasione nulla per contare anche perdersi volte requisiti Che Piacere il Riconoscimento Soddisfacentemente verso Te FAQ Riconoscimento In assenza di Complicato Scommesse, Movimento & Poker Avvenimento Sono i Compenso Senza contare Deposito Semplice Tumulto? FAQ Premio Privato di Contorto Scommesse, Agitazione & Poker Ad esempio slot machine, altri giochi di confusione disponibili Riconoscimento Saluto Escludendo Punto Celere e Privo di Inoltro Dossier Come agire durante rso ricompensa privo di bilancia di sotto