Documentazione
WWU Withdrawal Button mette WooCommerce, FluentCart ed Easy Digital Downloads a norma con il pulsante di recesso online richiesto dalla Direttiva UE 2023/2673 (art. 54-bis Codice del Consumo). Pulsante statutario, modulo in due passaggi, ricevuta su supporto durevole, log immodificabile e marca temporale. Gratuito e open source (GPLv3).
Come funziona (in pratica)
Per il cliente è semplicissimo — quattro passaggi:
- Clic sul pulsante. Il cliente apre il suo ordine e clicca «Recedere dal contratto qui» — dall'area account, dal link nell'email d'ordine, oppure dalla pagina pubblica (senza account: cerca l'ordine con numero + email). La dicitura è quella esatta prevista dalla legge per ogni lingua.
- Modulo in due passaggi. Rivede da cosa sta recedendo (può spuntare solo alcuni prodotti — recesso parziale), poi conferma. Nessun motivo obbligatorio, nessun dark pattern.
- Ricevuta su supporto durevole. Appena conferma, riceve email + PDF + link permanente verificabile con cosa ha recesso e data/ora esatte. L'ordine passa a «recesso richiesto» e tu ricevi una notifica.
- Prova immodificabile. Ogni passaggio finisce in un log append-only con hash-chain e marca temporale (data certa). Tu poi gestisci il rimborso come sempre — registrato anch'esso come prova del rispetto dei 14 giorni.
Tutto il resto del plugin serve a rendere questo flusso corretto, facile da gestire e difendibile. In sintesi, cosa include (ogni voce ha la sua sezione qui sotto):
- Per il cliente: pulsante statutario multilingua ovunque serva (account, email, pagina pubblica con lookup ospiti, shortcode, blocco), guida passo-passo su tempi e rimborso, nota «perché esente» quando il pulsante è giustamente assente, certificato di verifica leggibile della ricevuta, recesso parziale per prodotto.
- Per te (commerciante): cruscotto di onboarding con checklist a un clic e test di consegna email, gestione richieste (stati lavorata/rimborsata, badge integrità della catena, reinvio ricevuta, rimborso registrato), pagina Conformità con countdown, etichette in uso e clausole pronte, ricevuta come vera email WooCommerce con anteprima, campo CSS personalizzato.
- Gestione legale intelligente: abbonamenti (un solo diritto per contratto, pulsante sull'ordine iniziale), esenzioni Art. 59 con cattura del consenso al checkout e conferma su supporto durevole, ambito di applicabilità per Paese (UE/SEE o sempre), gestione B2B.
- Prova, marche temporali & integrità: log immodificabile con hash-chain + ancoraggio gratuito OpenTimestamps (Bitcoin) o eIDAS RFC 3161 qualificato (Sectigo gratis o QTSP nazionali), retry automatico delle marche, rimborso loggato.
- Privacy & GDPR: IP anonimizzato nell'hash, IP completo cancellabile dopo una retention configurabile (default 10 anni), registro consensi esportabile in CSV, due clausole privacy pronte (legittimo interesse).
- Documenti & conformità: generatore del modulo tipo Allegato I-B e delle clausole per precontrattuale / Condizioni / Privacy da incollare — con il promemoria che installare il pulsante non basta, vanno aggiornati anche i tuoi T&C.
- Automazioni & sviluppatori: API REST di sola lettura + webhook firmato (HMAC) + 33 hook documentati per Zapier/Make/n8n/CRM/helpdesk, privacy-first (l'IP del cliente non è mai esposto).
- Piattaforme & compatibilità: WooCommerce (HPOS + legacy), FluentCart ed Easy Digital Downloads con un solo plugin; compatibile con Complianz, TranslatePress e i cache plugin (WP Rocket / LiteSpeed / W3TC).
Requisiti
| WordPress | 5.6+ (consigliato 6.x) |
|---|---|
| PHP | 8.1+ (build della directory WordPress.org, con Dompdf 3.x). Ancora su PHP 7.4–8.0? Nelle release GitHub c'è una build compatibile con PHP 7.4 (stesse funzionalità, Dompdf 2.x): è un ponte temporaneo e non sarà mantenuto per sempre — PHP 7.4 è end-of-life da novembre 2022, conviene passare a PHP 8.1+ (più veloce e sicuro). |
| E-commerce | WooCommerce (HPOS + legacy), FluentCart oppure Easy Digital Downloads (3.0+) |
| Un plugin SMTP (es. FluentSMTP) per consegnare le ricevute |
Installazione
- Dalla directory WordPress.org (consigliato): in WordPress vai su Plugin → Aggiungi nuovo, cerca «WWU Right of Withdrawal» → Installa ora. Da qui ricevi gli aggiornamenti automatici. Pagina su WordPress.org →
- In alternativa (zip manuale): scarica
wwu-withdrawal-button.zipdalle release GitHub (include la libreria PDF), poi Plugin → Aggiungi nuovo → Carica plugin → seleziona lo ZIP → Installa ora (se esiste già scegli «Sostituisci l'attuale con il caricato»). - Attiva. Il plugin crea da solo la pagina pubblica «Diritto di recesso» e le tabelle del log.
Configurazione
Vai su Withdrawal Button → Settings e procedi dall'alto verso il basso. Il Dashboard ha una checklist che diventa tutta verde quando sei a posto.
- Abilita la funzione di recesso.
- Dove si applica — «Solo UE/SEE» (minimo legale) o «Mostra sempre»; opzionale esclusione B2B (P.IVA).
- Consumer guidance — finestra di recesso in giorni (min 14; puoi concederne di più) e, se vuoi, un testo guida personalizzato.
- Receipt & evidence — allega PDF, email di notifica, marca temporale (OpenTimestamps gratis, o RFC 3161), retention, slug della scheda account.
- Email delivery — configura l'SMTP, fai il test, poi «Preview the acknowledgement email».
Tutte le impostazioni
| Impostazione | Cosa fa |
|---|---|
| Enable withdrawal function | Mostra il pulsante ai consumatori idonei. |
| Applicability mode | Solo UE/SEE · Sempre · Lista paesi custom. + toggle B2B. |
| Withdrawal period (days) | Finestra mostrata al cliente. Minimo 14, estendibile. |
| Custom guidance text | Sostituisce il testo guida predefinito (HTML base). Responsabilità del merchant. |
| Clausole legali 1.2.1 | Modifica i testi delle clausole (precontrattuale / Condizioni / Privacy / consenso esenzioni) con parole tue — sostituiscono il modello predefinito ovunque, incluso lo shortcode [webwakeupwdb_info], e tolgono la nota «testo di esempio». Campo vuoto = resta il modello di base. |
| Attach PDF receipt | Allega una copia PDF alla ricevuta (l'email è comunque il supporto durevole). |
| Notification email | Dove ricevere l'avviso delle nuove richieste. Puoi inserire più indirizzi separati da virgola per notificare più persone; il primo è anche quello mostrato al cliente come contatto del negozio. |
| Trusted timestamp | OpenTimestamps · RFC 3161 (endpoint + credenziali) · Nessuna. |
| Evidence retention (years) | Per quanto conservare il log (default 10). |
| My Account tab slug | Slug della scheda «Diritto di recesso» nell'area cliente. |
| Personalizzazione CSS | Personalizza ogni elemento grafico dal Customizer di WordPress → CSS aggiuntivo, usando le classi/variabili documentate del plugin (riferimento incluso nelle impostazioni). |
| FluentCart | Auto (default) · Sempre · Off. In modalità Auto il plugin mostra il pulsante ma si fa da parte automaticamente se rileva un add-on di recesso nativo di FluentCart, così il cliente non vede mai due pulsanti. Riguarda solo le superfici consumer FluentCart; il cruscotto richieste e il log non sono modificati. |
Aggiorna i tuoi documenti legali (obbligatorio)
Installare il pulsante non basta per essere a norma. La Direttiva sui diritti dei consumatori (art. 6) impone di informare il consumatore su come esercita il recesso: con l'introduzione del pulsante, le tue Condizioni di vendita e le informazioni precontrattuali vanno aggiornate nell'articolo sul recesso per prevedere la nuova modalità con pulsante. Il plugin aggiunge il pulsante, ma non modifica i tuoi documenti pubblicati.
Per renderlo semplice, il plugin genera le clausole pronte da incollare — le trovi in Withdrawal Button → Conformità (e via shortcode [webwakeupwdb_info type="precontractual|terms|privacy"]):
- Informazioni precontrattuali — la clausola «Diritto di recesso» che cita esplicitamente il pulsante «Recedere dal contratto qui», oltre al modulo tipo (Allegato I-B) che resta obbligatorio.
- Condizioni di vendita — la clausola «Modalità di recesso»: il consumatore recede tramite il pulsante online o il modulo tipo, con avviso di ricevimento su supporto durevole e divieto di rendere il recesso più difficile dell'acquisto.
- Privacy — le clausole sul registro dei recessi e sulla prova del consenso alle esenzioni.
Dalla 1.2.1 puoi modificare questi testi direttamente dall'admin, senza codice: Pulsante di recesso → Settings → «Clausole legali». Scrivi le tue parole e salvi: il tuo testo sostituisce il modello ovunque (pagina Conformità + shortcode [webwakeupwdb_info]) e la nota «testo di esempio» sparisce. Lascia un campo vuoto per tenere il modello di base (c'è anche un «Mostra il default» per copiartelo come punto di partenza). Per chi sviluppa, c'è anche il filtro webwakeupwdb_clause_text.
Dalla 1.3.0, oltre alle singole clausole, il plugin assembla in automatico un'«Informativa sul diritto di recesso» completa a partire dalle tue impostazioni e dalle eccezioni Art. 59 selezionate. La gestisci da Conformità → «Informativa sul diritto di recesso»: anteprima, crea/apri la pagina (ricreabile in un clic), «congela» in HTML statico, oppure scaricala in PDF. La pubblichi anche con lo shortcode [webwakeupwdb_policy]. Opzionale: due toggle in Settings → Complianz documents appendono le stesse clausole alla Privacy Policy e alle Condizioni generali gestite da Complianz (solo UE, opt-in, off di default, con anteprima). Anche qui: integra — non sostituisce i tuoi testi.
Dalla 1.4.0, il modulo tipo (Allegato I-B) compila automaticamente la riga «Destinatario» con i dati della tua attività — nome, indirizzo geografico ed email — che imposti in Pulsante di recesso → Settings → «Seller details». Il resto del modulo resta il testo ufficiale di legge, non modificabile. Se lasci un campo vuoto, la riga usa come ripiego il nome del sito e l'email dell'amministratore; l'indirizzo geografico va inserito (è richiesto dalla legge sul modulo).
Dove appare il pulsante
- WooCommerce — area cliente: lista ordini, dettaglio ordine, scheda «Diritto di recesso»; + link aggiunto automaticamente dentro le email d'ordine WooCommerce (per gli ospiti).
- FluentCart — portale cliente: pagina «Diritto di recesso», voce nel menu, banner e pulsante nel singolo ordine. Per le email: FluentCart non consente ai plugin di aggiungere contenuto in automatico, quindi Impostazioni → FluentCart mostra una guida opzionale 1-volta per inserire il merge-tag
{{wwu.recesso_url}}nel template della ricevuta (3 passi). - Easy Digital Downloads — pulsante sulla ricevuta d'acquisto e nelle righe della cronologia acquisti; + link aggiunto automaticamente nell'email di ricevuta EDD.
- Su ogni piattaforma: pagina pubblica con lookup ospiti (numero ordine + email), e ovunque con gli shortcode o il blocco Gutenberg.
Shortcode & blocco
| Shortcode | Uso |
|---|---|
[webwakeupwdb_form] | Il modulo in due passaggi / selettore ordini. |
[webwakeupwdb_button order_id="…"] | Il solo pulsante per un ordine. |
[webwakeupwdb_status order_id="…"] | Lo stato della richiesta di un ordine. |
[webwakeupwdb_model_form lang="…"] | Il modulo tipo Allegato I-B (con la riga «Destinatario» compilata dai tuoi dati venditore — Settings → Seller details). |
[webwakeupwdb_info type="precontractual|terms|privacy"] | Le clausole legali pronte. |
[webwakeupwdb_policy] | L'informativa completa sul diritto di recesso (assemblata da impostazioni + eccezioni Art. 59). |
Blocco editor: «Withdrawal — self-service» (dynamic, server-rendered) per inserire la superficie ovunque nell'editor a blocchi.
Esperienza cliente
- Il cliente apre il suo ordine e clicca il pulsante statutario. Nel primo passaggio del modulo compare una checklist opzionale degli articoli dell'ordine: può selezionare solo i prodotti da restituire (recesso parziale, consentito dalla legge UE — Allegato I-B: «dei seguenti beni»). Se lascia la selezione vuota, il recesso riguarda l'intero ordine. Il recesso non è mai bloccato da questa scelta.
- Modulo in due passaggi (revisione → conferma), nessun dark pattern, nessun motivo richiesto.
- Alla conferma riceve subito un'attestazione di ricevimento via email (+ PDF + link verificabile), con l'elenco degli articoli selezionati; l'ordine passa a «recesso richiesto».
Gestione richieste
In Withdrawal Button → Requests: ogni richiesta con stato (Aperta / Lavorata / Rimborsata), badge integrità della catena, e azioni:
- Mark processed — segna come gestita (registrata nel log).
- Resend email — reinvia la ricevuta (utile dopo aver configurato l'SMTP).
- Refund order — apre la schermata rimborso WooCommerce. Il rimborso viene registrato nel log come prova del rispetto dei 14 giorni.
Marche temporali
Scegli in Receipt & evidence → Trusted timestamp:
| Provider | Note |
|---|---|
| OpenTimestamps | Gratis, ancorato a Bitcoin, nessun account (default). |
Sectigo /qualified | RFC 3161 eIDAS-qualificato, gratis, senza account. |
| QTSP nazionali | Aruba/InfoCert (IT), D-Trust (DE), Universign (FR), FNMT (ES), SwissSign (CH) — endpoint + credenziali. |
Esenzioni (Art. 59)
Alcuni prodotti/servizi non hanno diritto di recesso (beni su misura, deperibili, sigillati aperti, biglietti per eventi a data fissa, contenuti digitali ad accesso immediato con consenso, servizi già eseguiti…). In Impostazioni → Esenzioni tagghi prodotti/categorie per motivo statutario specifico, ciascuno con riferimento di legge e spiegazione in linguaggio semplice. Il diritto di recesso resta il default (prodotti digitali inclusi).
Quando un ordine è interamente esente, il pulsante di recesso non compare — ma il cliente non resta senza spiegazioni. Dalla 1.0.0-alpha.43, una nota breve e accurata riporta l'eccezione specifica applicata con il relativo riferimento normativo (es. «Contenuto digitale ad accesso immediato — Art. 16(1)(m) CRD / Art. 59(1)(o) Cod. Consumo»). La nota è mostrata sul modulo di recesso, nelle pagine account WooCommerce ed EDD e nel portale FluentCart. Il testo è editabile in Impostazioni → Guida al consumatore. Compare solo sugli ordini realmente esenti, mai su quelli ordinari; la visibilità del pulsante non cambia.
webwakeupwdb_consent_text. La cattura del consenso è ora attiva su WooCommerce (classico + a blocchi), FluentCart ed Easy Digital Downloads, con esenzioni anche per categoria. Dove la cattura non è disponibile il pulsante resta (fail-safe). Non nascondere mai il pulsante senza queste condizioni.Abbonamenti
La legge UE dà un solo diritto di recesso di 14 giorni per contratto, che parte dalla conclusione del contratto (art. 9 Dir. 2011/83/UE = art. 52 Codice del Consumo). Un rinnovo non lo fa ripartire: è la continuazione dello stesso contratto, non un nuovo contratto a distanza. Quindi:
- Il pulsante compare solo sull'ordine iniziale dell'abbonamento (entro la sua finestra di 14 giorni).
- Sugli ordini di rinnovo il pulsante è nascosto — un unico controllo copre automaticamente tutte le superfici (area cliente, portale, email, shortcode, blocco).
- Funziona con WooCommerce Subscriptions, gli abbonamenti FluentCart e EDD Recurring. Il rilevamento del rinnovo è prudente e fail-safe: se lo stato non è determinabile, il pulsante resta visibile (mai nascosto per errore).
In Impostazioni → Subscriptions ci sono due interruttori, entrambi disattivi per default:
| Impostazione | Cosa fa |
|---|---|
| Mostra anche sui rinnovi | Off consigliato. Attivalo solo se un parere legale dice che uno specifico rinnovo fa ripartire il diritto. |
| Annulla l'abbonamento al recesso | Off. Se attivo, alla conferma del recesso ferma i rinnovi futuri. Il rimborso e l'eventuale pro-rata per il servizio già usato restano sempre manuali. |
FAQ
Basta installare il pulsante per essere a norma? No. Devi aggiornare anche le tue Condizioni di vendita e le informazioni precontrattuali nell'articolo sul recesso, per prevedere la nuova modalità con pulsante (art. 6 della Direttiva diritti dei consumatori). Il plugin genera le clausole pronte da incollare — vedi Aggiorna i tuoi documenti legali.
Posso dare più di 14 giorni? Sì — imposta «Withdrawal period» a piacere (≥14). Il testo mostrato si aggiorna.
Come funziona con gli abbonamenti? Il pulsante compare sull'ordine iniziale e sparisce sui rinnovi (un solo diritto di 14 giorni per contratto). Il recesso non è la disdetta: il cliente può sempre fermare i rinnovi futuri dal suo account, ma il recesso è il diritto di 14 giorni con rimborso. Vedi la sezione Abbonamenti.
L'email non parte? Configura un plugin SMTP e usa «Send test email». Non è la libreria PDF.
Funziona con i temi a blocchi / FSE? Sì: la pagina My Account di WooCommerce è ancora resa dallo shortcode classico, gli hook funzionano; c'è anche un blocco Gutenberg.
La legge si applica ai prodotti digitali (plugin, software, download)? Sì. L'obbligo del pulsante riguarda il professionista che vende online a consumatori UE, non il singolo prodotto — anche uno shop di plugin o di contenuti digitali è in scope. I prodotti digitali hanno i 14 giorni di recesso per default; il diritto si toglie solo con consenso espresso + presa d'atto + conferma su supporto durevole (art. 59 lett. o), che il plugin cattura al checkout. Le vendite B2B (con partita IVA) e ai consumatori extra-UE sono fuori scope.
È consulenza legale? No, è uno strumento tecnico di supporto alla conformità. Fai revisionare i tuoi documenti da un legale.
Per sviluppatori
Il plugin espone 34 hook pubblici documentati (action e filter) per personalizzare il flusso di recesso, i testi, la logica di visibilità del pulsante, la ricevuta e il log — senza modificare il core del plugin.
API REST & webhook (automazioni)
Dalla 1.0.0-alpha.44 il plugin offre un'API REST di sola lettura (namespace webwakeupwdb/v1, autenticazione con Password applicazione di WordPress) per elencare le richieste di recesso e verificare lo stato di un ordine, più un webhook in uscita firmato (HMAC-SHA256) che notifica il tuo endpoint nel momento in cui un recesso viene confermato — pronto per Zapier, Make, n8n, un CRM o un helpdesk. Privacy-first: l'IP del consumatore non viene mai esposto (solo un hash di riga per la verifica d'integrità). Non esiste — per scelta — un endpoint per creare un recesso (è la dichiarazione legale del consumatore). Superata una verifica di sicurezza dedicata prima del rilascio.
Changelog
Mantieni questa sezione allineata al docs/changelog/wwu-wb-CHANGELOG.md del repository.
- Informativa sul diritto di recesso + conformità prefisso WordPress.org. Nuova «Informativa sul diritto di recesso» consolidata, assemblata dalle impostazioni + eccezioni Art. 59: shortcode
[webwakeupwdb_policy], pagina auto-creata (ricreabile in un clic), PDF, e iniezione opt-in nei documenti Complianz (Privacy + Condizioni, solo UE, off di default). Traduzioni it/de/es/fr/sv. Su richiesta del team WordPress.org, ogni identificatore interno è passato dal prefisso corto wwu a webwakeupwdb (costanti, opzioni, hook, shortcode, namespace, REST): gli installati esistenti migrano in automatico (impostazioni, prove di consenso, tabelle log/timestamp e pagine preservate); le installazioni nuove non sono toccate. Sviluppatori: il codice che usa i vecchi nomi (wwu_wb_*,[wwu_wb_*]) va aggiornato ai nuoviwebwakeupwdb_*.
- Conformità WordPress.org: timestamping opt-in, niente campo CSS personalizzato, PHP 8.1 + Dompdf 3.1.5. Il campo «CSS personalizzato» è stato rimosso: per personalizzare la grafica si usa il Customizer di WordPress → CSS aggiuntivo (con il riferimento alle classi/variabili nelle impostazioni). Il timestamp di garanzia (OpenTimestamps / RFC 3161) è ora opt-in e disattivo di default: il plugin non fa nessuna chiamata esterna se non lo attivi tu — il registro a catena di hash resta la prova di base e funziona offline. La build per la directory passa a PHP 8.1 + Dompdf 3.1.5; una build compatibile con PHP 7.4 (Dompdf 2.x) resta disponibile su GitHub. Note di rilascio →
- Pagina «Consent Records» ora cross-platform (risolve #41). La pagina admin dei consensi (e l'export CSV) leggeva solo gli ordini WooCommerce, quindi su uno store Easy Digital Downloads o FluentCart mostrava «WooCommerce non attivo» pur avendo catturato il consenso. Ora attinge dal registro prove immutabile e cross-platform (dove WooCommerce — classico e a blocchi —, EDD e FluentCart scrivono tutti al momento della cattura), così i consensi di ogni piattaforma compaiono; le entries complete (con IP) vengono rilette dall'ordine quando esiste, e sopravvivono come record PII-free se l'ordine è stato cancellato. Nuova colonna «Platform». Modifica di sola lettura: il registro a prova di manomissione non viene mai alterato. Note di rilascio →
- Conformità WordPress.org (Plugin Check) — solo fix reali. Aggiunto
wp_unslash()agli input del salvataggio impostazioni (i valori erano già sanitizzati: è il passaggio canonico che il tool Plugin Check si aspetta) e silenziato un falso positivo «query non preparata» sulla verifica d'integrità (nessun input utente: nome tabella da$wpdb->prefix, LIMIT con cast a intero). Accorciate alcune note di aggiornamento troppo lunghe. Nessun cambiamento di comportamento. Note di rilascio →
- Finestra di recesso «type-aware» (digitale = data ordine, fisico = consegna). Il conteggio dei 14 giorni mostrato al cliente ora si calcola in base al tipo di prodotto: gli ordini tutti digitali partono dalla data dell'ordine (conclusione del contratto, Art. 9 Dir. 2011/83 / Art. 52 Cod. Consumo), mentre gli ordini con prodotti fisici restano invariati (data di consegna / «completato»). Resta solo informativo: il pulsante non viene mai nascosto su questo valore. Nessuna modifica per i prodotti fisici. Note di rilascio →
- Recesso da ospite corretto su tutte le superfici. Completa la 1.2.7: anche lo shortcode
[webwakeupwdb_button]e il link «azioni ordine» (che alcuni temi mostrano nella pagina di conferma ordine) portano ora gli ospiti alla pagina pubblica di recesso, non più alla schermata di login. Un helper condiviso costruisce l'URL nello stesso modo ovunque. Clienti loggati invariati. Note di rilascio →
- Il pulsante di recesso non chiede più il login agli ospiti. Nel riepilogo ordine il pulsante mandava i clienti senza account alla schermata di login, perché puntava all'area «Il mio account». Ora gli ospiti vengono indirizzati alla pagina pubblica di recesso (con riferimento ordine + chiave, lo stesso link pre-autenticato dell'email d'ordine), così possono recedere senza account. Clienti loggati invariati. Note di rilascio →
- Traduzioni complete per tutte le lingue incluse. Alcune stringhe admin delle ultime release (editor «Clausole legali», campo «Email di notifica», promemoria sui testi legali nella pagina Conformità, helper email FluentCart) comparivano in inglese perché non ancora tradotte. I cinque file di lingua (italiano, tedesco, francese, spagnolo, svedese) sono ora completi per queste stringhe. (Lo svedese è assistito da macchina, in attesa di revisione madrelingua.) Note di rilascio →
- Compatibilità PHP 7.4 ripristinata + notifiche a più destinatari + coesistenza FluentCart automatica. La libreria PDF (Dompdf) era stata aggiornata a una versione che richiede PHP 8.1, causando un errore «platform» di Composer vicino all'opzione PDF sui siti con PHP 7.4: ora è riportata alla linea 2.x compatibile con 7.4 (ricevute PDF invariate, verificato con audit di render). Il campo Impostazioni → Email di notifica accetta ora più indirizzi separati da virgola (il primo è anche il contatto mostrato al cliente). E con la gestione FluentCart su Auto, il plugin rileva automaticamente l'add-on «Customer Rights» di FluentCart e si fa da parte da solo — niente doppio pulsante. Note di rilascio →
- Compatibilità PHP 7.4 ripristinata + notifiche a più destinatari + coesistenza FluentCart automatica. La libreria PDF (Dompdf) era stata aggiornata a una versione che richiede PHP 8.1, causando un errore «platform» di Composer vicino all'opzione PDF sui siti con PHP 7.4: ora è riportata alla linea 2.x compatibile con 7.4 (ricevute PDF invariate, verificato con audit di render). Il campo Impostazioni → Email di notifica accetta ora più indirizzi separati da virgola (il primo è anche il contatto mostrato al cliente). E con la gestione FluentCart su Auto, il plugin rileva automaticamente l'add-on «Customer Rights» di FluentCart e si fa da parte da solo — niente doppio pulsante. Note di rilascio →
- Conformità WordPress.org e piccole sicurezze. Nome del plugin reso più distintivo e privo di marchi di terzi, sanitizzazione aggiuntiva sull'input del rate-limiter, escaping URL nelle email in testo semplice, permission callback REST espliciti sugli endpoint pubblici e rimozione del loader di traduzioni non più necessario (WordPress le carica da solo dal 4.6). Nessuna modifica al flusso di recesso o ai tuoi dati. Note di rilascio →
- Conformità WordPress.org e piccole sicurezze. Nome del plugin reso più distintivo e privo di marchi di terzi, sanitizzazione aggiuntiva sull'input del rate-limiter, escaping URL nelle email in testo semplice, permission callback REST espliciti sugli endpoint pubblici e rimozione del loader di traduzioni non più necessario (WordPress le carica da solo dal 4.6). Nessuna modifica al flusso di recesso o ai tuoi dati. Note di rilascio →
- L'errore di invio email mostra ora il motivo esatto, non un messaggio generico. Seguito della 1.2.2: se l'email di conferma non parte, il plugin cattura il motivo specifico dal sistema di invio — l'errore del plugin SMTP (ad es. «Could not authenticate» o «Could not connect to host…») oppure il messaggio dell'eccezione — e lo mostra nell'avviso admin «email non inviata» e nel registro a prova di manomissione, invece di un generico «email failed». Diagnosticare una configurazione SMTP errata (WP Mail SMTP, FluentSMTP) diventa immediato, senza frugare nel log PHP. Il recesso resta sempre registrato e il cliente raggiunge sempre la pagina di conferma. Note di rilascio →
- L'errore di invio email mostra ora il motivo esatto, non un messaggio generico. Seguito della 1.2.2: se l'email di conferma non parte, il plugin cattura il motivo specifico dal sistema di invio — l'errore del plugin SMTP (ad es. «Could not authenticate» o «Could not connect to host…») oppure il messaggio dell'eccezione — e lo mostra nell'avviso admin «email non inviata» e nel registro a prova di manomissione, invece di un generico «email failed». Diagnosticare una configurazione SMTP errata (WP Mail SMTP, FluentSMTP) diventa immediato, senza frugare nel log PHP. Il recesso resta sempre registrato e il cliente raggiunge sempre la pagina di conferma. Note di rilascio →
- Fix critico: niente più «errore critico» durante l'invio dell'email di conferma. Su alcuni siti (segnalato con WP Mail SMTP), alla conferma del recesso e al «Invia email di nuovo» un'eccezione sollevata dentro
wp_mail()dal plugin SMTP — o un errore del PDF su PHP 8 — poteva sfuggire e mandare la pagina in «errore critico», anche se il recesso era già registrato. Ora tutto il percorso di invio è a prova di eccezione (mailer, email WooCommerce e PDF opzionale): un invio fallito viene segnalato e si può rinviare, senza far crashare la pagina. Inoltre: guida alla convivenza ora che FluentCart 1.4.2 include un proprio modulo di recesso nativo (Settings → FluentCart: imposta su «Off» se usi quello di FluentCart). Note di rilascio →
- Fix critico: niente più «errore critico» durante l'invio dell'email di conferma. Su alcuni siti (segnalato con WP Mail SMTP), alla conferma del recesso e al «Invia email di nuovo» un'eccezione sollevata dentro
wp_mail()dal plugin SMTP — o un errore del PDF su PHP 8 — poteva sfuggire e mandare la pagina in «errore critico», anche se il recesso era già registrato. Ora tutto il percorso di invio è a prova di eccezione (mailer, email WooCommerce e PDF opzionale): un invio fallito viene segnalato e si può rinviare, senza far crashare la pagina. Inoltre: guida alla convivenza ora che FluentCart 1.4.2 include un proprio modulo di recesso nativo (Settings → FluentCart: imposta su «Off» se usi quello di FluentCart). Note di rilascio →
- Fix: la scheda «Diritto di recesso» non dà più 404 su un'installazione nuova + clausole legali modificabili dall'admin. La scheda nell'area cliente WooCommerce è un endpoint (non una pagina): le regole di rewrite non venivano rigenerate all'attivazione, dando 404 finché non si ri-salvavano i permalink. Ora il plugin le rigenera da solo al primo caricamento dopo l'attivazione (workaround manuale: Impostazioni → Permalink → Salva). Inoltre, una nuova sezione Settings → «Clausole legali» permette di modificare i testi delle clausole (precontrattuale / Condizioni / Privacy / consenso) con parole tue, senza codice — sostituiscono il modello ovunque, anche nello shortcode
[webwakeupwdb_info](più il filtrowebwakeupwdb_clause_textper gli sviluppatori). Note di rilascio →
- Fix: la scheda «Diritto di recesso» non dà più 404 su un'installazione nuova + clausole legali modificabili dall'admin. La scheda nell'area cliente WooCommerce è un endpoint (non una pagina): le regole di rewrite non venivano rigenerate all'attivazione, dando 404 finché non si ri-salvavano i permalink. Ora il plugin le rigenera da solo al primo caricamento dopo l'attivazione (workaround manuale: Impostazioni → Permalink → Salva). Inoltre, una nuova sezione Settings → «Clausole legali» permette di modificare i testi delle clausole (precontrattuale / Condizioni / Privacy / consenso) con parole tue, senza codice — sostituiscono il modello ovunque, anche nello shortcode
[webwakeupwdb_info](più il filtrowwu_wb_clause_textper gli sviluppatori). Note di rilascio →
- Promemoria: aggiorna anche i tuoi documenti legali. Installare il pulsante non aggiorna i documenti del tuo shop. La legge (art. 6 della Direttiva sui diritti dei consumatori) impone che le Condizioni di vendita e le informazioni precontrattuali descrivano come il consumatore recede — e ora questo include il nuovo pulsante online. Il plugin lo segnala ora con evidenza nel Cruscotto e nella pagina Conformità, apre per default le due clausole da incollare (precontrattuale + condizioni) e la clausola «Modalità di recesso» nomina ora esplicitamente il pulsante. Nessun cambiamento al flusso di recesso. Vedi Aggiorna i tuoi documenti legali.
- Promemoria: aggiorna anche i tuoi documenti legali. Installare il pulsante non aggiorna i documenti del tuo shop. La legge (art. 6 della Direttiva sui diritti dei consumatori) impone che le Condizioni di vendita e le informazioni precontrattuali descrivano come il consumatore recede — e ora questo include il nuovo pulsante online. Il plugin lo segnala ora con evidenza nel Cruscotto e nella pagina Conformità, apre per default le due clausole da incollare (precontrattuale + condizioni) e la clausola «Modalità di recesso» nomina ora esplicitamente il pulsante. Nessun cambiamento al flusso di recesso. Vedi Aggiorna i tuoi documenti legali.
- Link di recesso nelle email d'ordine — su tutte le piattaforme. Il link viene aggiunto automaticamente alle email cliente di WooCommerce e alla ricevuta email di Easy Digital Downloads (così il cliente raggiunge il recesso direttamente dall'email, come suggerisce il Considerando 37). FluentCart non permette ai plugin di aggiungere contenuto alle sue email in automatico: perciò Impostazioni → FluentCart mostra ora una breve guida opzionale (3 passi) per inserire lo shortcode
{{wwu.recesso_url}}nel template della ricevuta. Niente di invasivo e niente di obbligatorio: il recesso è sempre raggiungibile da area cliente/portale e pagina pubblica. Note di rilascio →
- Link di recesso nelle email d'ordine — su tutte le piattaforme. Il link viene aggiunto automaticamente alle email cliente di WooCommerce e alla ricevuta email di Easy Digital Downloads (così il cliente raggiunge il recesso direttamente dall'email, come suggerisce il Considerando 37). FluentCart non permette ai plugin di aggiungere contenuto alle sue email in automatico: perciò Impostazioni → FluentCart mostra ora una breve guida opzionale (3 passi) per inserire lo shortcode
{{wwu.recesso_url}}nel template della ricevuta. Niente di invasivo e niente di obbligatorio: il recesso è sempre raggiungibile da area cliente/portale e pagina pubblica. Note di rilascio →
- Automazioni: API REST di sola lettura + webhook firmato. Nuova sezione Impostazioni → Integrazioni per collegare le richieste di recesso a sistemi esterni (Zapier, Make, n8n, CRM, helpdesk). (1) Un'API REST di sola lettura (
webwakeupwdb/v1) per elencare le richieste e verificare lo stato di un ordine, autenticata con una Password applicazione di WordPress. (2) Un webhook opzionale che invia una notifica firmata HMAC-SHA256 al tuo endpoint quando un recesso viene confermato. Privacy-first: l'IP del consumatore non è mai esposto (solo un hash di verifica). Nessun endpoint per creare un recesso, per scelta legale. Superata una verifica di sicurezza dedicata. Nessun cambiamento al flusso di recesso. Note di rilascio →
- Automazioni: API REST di sola lettura + webhook firmato. Nuova sezione Impostazioni → Integrazioni per collegare le richieste di recesso a sistemi esterni (Zapier, Make, n8n, CRM, helpdesk). (1) Un'API REST di sola lettura (
wwu-wb/v1) per elencare le richieste e verificare lo stato di un ordine, autenticata con una Password applicazione di WordPress. (2) Un webhook opzionale che invia una notifica firmata HMAC-SHA256 al tuo endpoint quando un recesso viene confermato. Privacy-first: l'IP del consumatore non è mai esposto (solo un hash di verifica). Nessun endpoint per creare un recesso, per scelta legale. Superata una verifica di sicurezza dedicata. Nessun cambiamento al flusso di recesso. Note di rilascio →
- Nota «perché esente» lato consumatore. Quando tutti gli articoli di un ordine rientrano in un'eccezione Art. 59 (es. contenuto digitale ad accesso immediato o servizio interamente eseguito, entrambi con consenso raccolto al checkout), il pulsante di recesso è assente. Il cliente vede ora una nota breve e accurata che riporta l'eccezione specifica con il riferimento normativo (es. «Contenuto digitale ad accesso immediato — Art. 16(1)(m) CRD / Art. 59(1)(o) Cod. Consumo»). Mostrata sul modulo di recesso, nelle pagine account WooCommerce ed EDD e nel portale FluentCart. Testo editabile in Impostazioni → Guida al consumatore. Compare solo sugli ordini realmente esenti — mai su quelli ordinari; la visibilità del pulsante non cambia. Note di rilascio →
- Nota «perché esente» lato consumatore. Quando tutti gli articoli di un ordine rientrano in un'eccezione Art. 59 (es. contenuto digitale ad accesso immediato o servizio interamente eseguito, entrambi con consenso raccolto al checkout), il pulsante di recesso è assente. Il cliente vede ora una nota breve e accurata che riporta l'eccezione specifica con il riferimento normativo (es. «Contenuto digitale ad accesso immediato — Art. 16(1)(m) CRD / Art. 59(1)(o) Cod. Consumo»). Mostrata sul modulo di recesso, nelle pagine account WooCommerce ed EDD e nel portale FluentCart. Testo editabile in Impostazioni → Guida al consumatore. Compare solo sugli ordini realmente esenti — mai su quelli ordinari; la visibilità del pulsante non cambia. Note di rilascio →
- Recesso parziale per prodotto (consumer-facing). La legge UE consente di recedere anche da parte degli articoli di un ordine (Allegato I-B: «dei seguenti beni»). Il primo passaggio del modulo mostra ora una checklist opzionale: il consumatore seleziona i prodotti da restituire; lasciando vuoto, recede dall'intero ordine. La selezione appare sulla ricevuta su supporto durevole e nel cruscotto Richieste. Rimborso (totale o parziale) sempre manuale. Il recesso non è mai bloccato. Note di rilascio →
- Recesso parziale per prodotto (consumer-facing). La legge UE consente di recedere anche da parte degli articoli di un ordine (Allegato I-B: «dei seguenti beni»). Il primo passaggio del modulo mostra ora una checklist opzionale: il consumatore seleziona i prodotti da restituire; lasciando vuoto, recede dall'intero ordine. La selezione appare sulla ricevuta su supporto durevole e nel cruscotto Richieste. Rimborso (totale o parziale) sempre manuale. Il recesso non è mai bloccato. Note di rilascio →
- Gestione FluentCart configurabile. Nuova impostazione Impostazioni → FluentCart con tre modalità: Auto (default) — mostra il pulsante ma cede automaticamente se rileva l'add-on di recesso nativo di FluentCart, così il cliente non vede mai due pulsanti; Sempre — mantiene sempre il nostro pulsante; Off — disabilita la gestione FluentCart. Riguarda solo le superfici consumer; admin e richieste esistenti non sono modificati. Note di rilascio →
- Gestione FluentCart configurabile. Nuova impostazione Impostazioni → FluentCart con tre modalità: Auto (default) — mostra il pulsante ma cede automaticamente se rileva l'add-on di recesso nativo di FluentCart, così il cliente non vede mai due pulsanti; Sempre — mantiene sempre il nostro pulsante; Off — disabilita la gestione FluentCart. Riguarda solo le superfici consumer; admin e richieste esistenti non sono modificati. Note di rilascio →
- Abbonamenti gestiti correttamente (WooCommerce Subscriptions, FluentCart, EDD Recurring). La legge UE dà un solo diritto di recesso di 14 giorni per contratto, alla conclusione: un rinnovo non lo fa ripartire. Il pulsante compare ora solo sull'ordine iniziale ed è nascosto sugli ordini di rinnovo (un unico controllo copre tutte le superfici). Due interruttori opt-in in Impostazioni → Subscriptions (mostra anche sui rinnovi · annulla l'abbonamento al recesso), entrambi off di default — rimborso e pro-rata restano manuali. Il cruscotto richieste segnala gli ordini di abbonamento con un promemoria. Rilevamento del rinnovo prudente e fail-safe (se incerto, il pulsante resta). Da testare con un plugin abbonamenti attivo. Vedi Abbonamenti.
- Abbonamenti gestiti correttamente (WooCommerce Subscriptions, FluentCart, EDD Recurring). La legge UE dà un solo diritto di recesso di 14 giorni per contratto, alla conclusione: un rinnovo non lo fa ripartire. Il pulsante compare ora solo sull'ordine iniziale ed è nascosto sugli ordini di rinnovo (un unico controllo copre tutte le superfici). Due interruttori opt-in in Impostazioni → Subscriptions (mostra anche sui rinnovi · annulla l'abbonamento al recesso), entrambi off di default — rimborso e pro-rata restano manuali. Il cruscotto richieste segnala gli ordini di abbonamento con un promemoria. Rilevamento del rinnovo prudente e fail-safe (se incerto, il pulsante resta). Da testare con un plugin abbonamenti attivo. Vedi Abbonamenti.
- Merge-tag email FluentCart . Inserisci il link di recesso del singolo ordine dentro le email transazionali native di FluentCart (es. ricevuta d'ordine). Il team FluentCart ha confermato il contratto dell'hook; il tag è registrato nel selettore dell'editor email e si risolve in sicurezza (vuoto se nel contesto non c'è un ordine). Da testare su FluentCart reale. Nota: FluentCart ha annunciato una funzione di recesso UE nativa in arrivo.
- Merge-tag email FluentCart
{{wwu.recesso_url}}. Inserisci il link di recesso del singolo ordine dentro le email transazionali native di FluentCart (es. ricevuta d'ordine). Il team FluentCart ha confermato il contratto dell'hook; il tag è registrato nel selettore dell'editor email e si risolve in sicurezza (vuoto se nel contesto non c'è un ordine). Da testare su FluentCart reale. Nota: FluentCart ha annunciato una funzione di recesso UE nativa in arrivo.
- Audit di sicurezza completo dell'intero plugin — 0 critical, 0 high. SQLi, XSS, CSRF, controllo accessi/IDOR, file/deserializzazione, crittografia/integrità delle prove e dipendenza Dompdf tutti puliti. Fix: guard SSRF sull'endpoint RFC 3161 configurabile (blocca target interni / cloud-metadata / IPv6-loopback / CGNAT), rate-limit sugli endpoint di recesso, cap di lunghezza sugli input, mascheramento debug più stretto, pulizia cron alla disinstallazione. Nessun cambiamento per il cliente.
- Audit di sicurezza completo dell'intero plugin — 0 critical, 0 high. SQLi, XSS, CSRF, controllo accessi/IDOR, file/deserializzazione, crittografia/integrità delle prove e dipendenza Dompdf tutti puliti. Fix: guard SSRF sull'endpoint RFC 3161 configurabile (blocca target interni / cloud-metadata / IPv6-loopback / CGNAT), rate-limit sugli endpoint di recesso, cap di lunghezza sugli input, mascheramento debug più stretto, pulizia cron alla disinstallazione. Nessun cambiamento per il cliente.
- EDD: il pulsante di recesso compare ora sulle pagine del cliente. Su Easy Digital Downloads il pulsante appare sulla ricevuta d'acquisto e in ogni riga della cronologia acquisti, e il link è aggiunto all'email di ricevuta EDD — parità piena con WooCommerce e FluentCart (prima EDD usava solo la pagina pubblica). Costruito su hook EDD 3.x verificati sulla sorgente ufficiale. Da testare su store EDD reale.
- EDD: il pulsante di recesso compare ora sulle pagine del cliente. Su Easy Digital Downloads il pulsante appare sulla ricevuta d'acquisto e in ogni riga della cronologia acquisti, e il link è aggiunto all'email di ricevuta EDD — parità piena con WooCommerce e FluentCart (prima EDD usava solo la pagina pubblica). Costruito su hook EDD 3.x verificati sulla sorgente ufficiale. Da testare su store EDD reale.
- Miglioramenti FluentCart verificati col team. La casella di consenso compare ora su
before_payment_methods(copre checkout standard, modale e a blocchi); le esenzioni FluentCart sono per categoria (tassonomiaproduct-categories, come WooCommerce ed EDD); le note di recesso/rimborso compaiono nella timeline attività dell'ordine FluentCart.
- Miglioramenti FluentCart verificati col team. La casella di consenso compare ora su
before_payment_methods(copre checkout standard, modale e a blocchi); le esenzioni FluentCart sono per categoria (tassonomiaproduct-categories, come WooCommerce ed EDD); le note di recesso/rimborso compaiono nella timeline attività dell'ordine FluentCart.
- Easy Digital Downloads (EDD 3.0+) supportato. Terza piattaforma dopo WooCommerce e FluentCart: pulsante di recesso, flusso prova ed esenzioni con cattura del consenso funzionano sugli store EDD, con esenzioni per categoria (download_category). Da testare su uno store EDD reale.
- Easy Digital Downloads (EDD 3.0+) supportato. Terza piattaforma dopo WooCommerce e FluentCart: pulsante di recesso, flusso prova ed esenzioni con cattura del consenso funzionano sugli store EDD, con esenzioni per categoria (download_category). Da testare su uno store EDD reale.
- Cattura del consenso anche sul Checkout a blocchi di WooCommerce (via la Additional Checkout Fields API ufficiale, WooCommerce 9.9+), parità con il checkout classico e con FluentCart. PHP puro, nessun build. + SPEC per la futura integrazione EDD.
- Cattura del consenso anche sul Checkout a blocchi di WooCommerce (via la Additional Checkout Fields API ufficiale, WooCommerce 9.9+), parità con il checkout classico e con FluentCart. PHP puro, nessun build. + SPEC per la futura integrazione EDD.
- Impostazioni esenzioni ridisegnate (WWU UI Kit): motivi raggruppati (condizionati / incondizionati / sigillo) con tooltip, esempi, helper «Cosa vendi?», anteprima di cosa vede il cliente (casella + email) e pannello di stato. Completate le traduzioni IT/FR/ES/DE, incluse le etichette delle esenzioni che prima comparivano in inglese.
- Impostazioni esenzioni ridisegnate (WWU UI Kit): motivi raggruppati (condizionati / incondizionati / sigillo) con tooltip, esempi, helper «Cosa vendi?», anteprima di cosa vede il cliente (casella + email) e pannello di stato. Completate le traduzioni IT/FR/ES/DE, incluse le etichette delle esenzioni che prima comparivano in inglese.
- Cattura del consenso su FluentCart. Le esenzioni condizionate (digitale immediato / servizio eseguito) ora raccolgono il consenso anche al checkout FluentCart, con email di conferma su supporto durevole — costruito su hook verificati sui doc ufficiali. Link «apri ordine» admin via l'URL nativo FluentCart.
- Cattura del consenso su FluentCart. Le esenzioni condizionate (digitale immediato / servizio eseguito) ora raccolgono il consenso anche al checkout FluentCart, con email di conferma su supporto durevole — costruito su hook verificati sui doc ufficiali. Link «apri ordine» admin via l'URL nativo FluentCart.
- Esenzioni (Art. 59) — conferma su supporto durevole + prova, conservazione, GDPR. Per i casi condizionati il plugin invia ora al cliente un'email di conferma su supporto durevole che riproduce il testo del consenso accettato (costitutiva per il digitale, art. 59(1)(o)) e ne registra l'invio separatamente. I consensi conservati hanno una retention configurabile (default 10 anni) con una routine giornaliera che poi anonimizza l'IP; l'IP è configurabile e non finisce mai nel log immodificabile. Aggiunte una clausola privacy GDPR pronta (legittimo interesse) e una pagina "Consent records" con export CSV. Copy più chiara ovunque: i prodotti fisici non richiedono mai il consenso; il pulsante si nasconde solo dopo la cattura (fail-safe).
- Esenzioni (Art. 59) — conferma su supporto durevole + prova, conservazione, GDPR. Per i casi condizionati il plugin invia ora al cliente un'email di conferma su supporto durevole che riproduce il testo del consenso accettato (costitutiva per il digitale, art. 59(1)(o)) e ne registra l'invio separatamente. I consensi conservati hanno una retention configurabile (default 10 anni) con una routine giornaliera che poi anonimizza l'IP; l'IP è configurabile e non finisce mai nel log immodificabile. Aggiunte una clausola privacy GDPR pronta (legittimo interesse) e una pagina "Consent records" con export CSV. Copy più chiara ovunque: i prodotti fisici non richiedono mai il consenso; il pulsante si nasconde solo dopo la cattura (fail-safe).
- Esenzioni (Art. 59) — cattura del consenso al checkout. Per i due casi condizionati (contenuto digitale ad accesso immediato; servizio già eseguito), il checkout WooCommerce mostra una casella di presa d'atto obbligatoria e salva il testo accettato (con hash SHA-256, data/ora e IP) sull'ordine come prova: il pulsante viene nascosto per quegli articoli solo dopo il consenso legittimo. Testo personalizzabile via
webwakeupwdb_consent_text. Checkout classico WooCommerce; checkout a blocchi e FluentCart in arrivo.
- Esenzioni (Art. 59) — cattura del consenso al checkout. Per i due casi condizionati (contenuto digitale ad accesso immediato; servizio già eseguito), il checkout WooCommerce mostra una casella di presa d'atto obbligatoria e salva il testo accettato (con hash SHA-256, data/ora e IP) sull'ordine come prova: il pulsante viene nascosto per quegli articoli solo dopo il consenso legittimo. Testo personalizzabile via
webwakeupwdb_consent_text. Checkout classico WooCommerce; checkout a blocchi e FluentCart in arrivo.
- Esenzioni (Art. 59) — tagging per motivo. Marca prodotti o categorie come esenti per uno specifico motivo statutario (su misura, deperibile, sigillato igienico, servizi a data fissa, digitale immediato, servizio eseguito…), ciascuno con riferimento di legge e guida in linguaggio semplice. Il diritto di recesso resta il default — inclusi i prodotti digitali — e i motivi condizionati mantengono il pulsante finché non viene catturato il consenso.
- Esenzioni (Art. 59) — tagging per motivo. Marca prodotti o categorie come esenti per uno specifico motivo statutario (su misura, deperibile, sigillato igienico, servizi a data fissa, digitale immediato, servizio eseguito…), ciascuno con riferimento di legge e guida in linguaggio semplice. Il diritto di recesso resta il default — inclusi i prodotti digitali — e i motivi condizionati mantengono il pulsante finché non viene catturato il consenso.
- Portale cliente FluentCart funzionante: pagina «Diritto di recesso» nell'account, voce nel menu laterale, pulsante nel singolo ordine e banner. Ogni hook è stato corretto sul contratto ufficiale FluentCart (verificato su dev.fluentcart.com) e la lista ordini legge i dati tramite le relazioni corrette (cliente, indirizzo). Risolve la pagina bianca e il pulsante mancante visti nei test dal vivo.
- Portale cliente FluentCart funzionante: pagina «Diritto di recesso» nell'account, voce nel menu laterale, pulsante nel singolo ordine e banner. Ogni hook è stato corretto sul contratto ufficiale FluentCart (verificato su dev.fluentcart.com) e la lista ordini legge i dati tramite le relazioni corrette (cliente, indirizzo). Risolve la pagina bianca e il pulsante mancante visti nei test dal vivo.
- Prima integrazione del portale cliente FluentCart + lista ordini idonei valida sia per WooCommerce che per FluentCart.
- Prima integrazione del portale cliente FluentCart + lista ordini idonei valida sia per WooCommerce che per FluentCart.
- Guida al consumatore (passo-passo, ovunque) + riferimento provider di marca temporale nei settings.
- Guida al consumatore (passo-passo, ovunque) + riferimento provider di marca temporale nei settings.
- Provider marca temporale RFC 3161 / eIDAS (Sectigo gratis qualificato + QTSP nazionali).
- Provider marca temporale RFC 3161 / eIDAS (Sectigo gratis qualificato + QTSP nazionali).
- Rimborso registrato nel log come prova; guida «cosa fare dopo una richiesta».
- Rimborso registrato nel log come prova; guida «cosa fare dopo una richiesta».
- Workflow di gestione richieste (stato, mark processed, resend, refund) + fix CSS lista.
- Workflow di gestione richieste (stato, mark processed, resend, refund) + fix CSS lista.
- Lista ordini idonei, pagina di verifica leggibile, anteprima email, blocco Gutenberg.
- Lista ordini idonei, pagina di verifica leggibile, anteprima email, blocco Gutenberg.
- Cruscotto onboarding, integrazione email WooCommerce, diagnostica consegna email, fix bug rendering.
- Cruscotto onboarding, integrazione email WooCommerce, diagnostica consegna email, fix bug rendering.
- MVP: pulsante statutario, modulo due-passaggi, ricevuta durevole, log immodificabile + OpenTimestamps, applicabilità per paese, multilingua IT/EN/DE/FR/ES, documenti legali, CSS personalizzabile.
- MVP: pulsante statutario, modulo due-passaggi, ricevuta durevole, log immodificabile + OpenTimestamps, applicabilità per paese, multilingua IT/EN/DE/FR/ES, documenti legali, CSS personalizzabile.