Lo sviluppo di questa versione è costato 4.250 euro. Il costo della prima versione è stato di 38.000 euro. Il costo accumulato dalla prima versione è di 46.610 euro, ma il costo per te è solo la licenza da 80€.
Nuovo ramo 3.0.x del plugin Abbonamenti Avanzati per WooCommerce. È una versione principale: introduce le opzioni di acquisto nella scheda prodotto («Acquisto unico» o «Iscriviti e risparmia»), lo sconto opzionale Iscriviti e risparmia con regole proprie, la traduzione completa in italiano e la possibilità per il cliente di modificare la quantità e la frequenza del suo abbonamento da Il mio account. Inoltre, porta un audit di sicurezza completo e un lungo elenco di correzioni su rinnovi, cambi di piano, sconti e gateway di pagamento.
Versioni del ramo
3.0.0
Importante:
- Aggiornamento consigliato per tutti i negozi: include correzioni di sicurezza e di addebiti nei gateway inclusi, in Il mio account e nei rinnovi.
- Il selettore «Acquisto unico / Abbonamento» che appariva sotto il prezzo scompare e viene sostituito dal nuovo widget delle opzioni di acquisto. Se il tuo tema o qualche frammento di codice dipendeva da esso, controllalo prima di aggiornare.
- Il modulo di data di inizio personalizzata (Custom Start Date) è disattivato nella 3.0.0 e la sua sezione di impostazioni non viene mostrata, anche nei negozi che lo avevano attivato: mostrava la data scelta, ma l'abbonamento iniziava e veniva addebitato immediatamente. Tornerà, completato, in una versione successiva.
- L'email di promemoria per il rinnovo è disattivata per impostazione predefinita. Se l'avevi salvata come attivata, verrà disattivata una volta aggiornato affinché i tuoi clienti non ricevano email a sorpresa; puoi riattivarla quando vuoi.
- Aggiornando, gli abbonamenti che erano rimasti in «In attesa di cancellazione» vengono cancellati alla loro successiva data di pagamento, o nelle dodici ore successive se quella data è già passata. Riceverai quindi le loro email di cancellazione.
- Aggiornando, gli abbonamenti attivi con la data del prossimo pagamento nel passato e nulla programmato iniziano a essere addebitati alla successiva data del loro ciclo. Il periodo scaduto non viene addebitato e rimane una nota nell'abbonamento.
Nuovo:
- Opzioni di acquisto nella scheda prodotto: «Acquisto unico» o «Iscriviti e risparmia», come un gruppo di opzioni nativo e gestibile con la tastiera, con il risparmio evidenziato in un'etichetta. Funziona in prodotti semplici e variabili (per variazione) e in temi classici e a blocchi. L'opzione pre-selezionata viene scelta nelle impostazioni.
- Iscriviti e risparmia (disattivato per impostazione predefinita; nulla cambia finché non lo attivi): il prezzo dell'abbonamento è il prezzo normale del prodotto meno una percentuale (dall'1% al 50%), che può provenire da un'impostazione del prodotto o della variazione, dalla prima regola che corrisponde o dall'impostazione globale. Puoi anche scontare il primo ordine e limitare il numero di ordini scontati. Tutto viene salvato nell'abbonamento al momento dell'iscrizione, quindi cambiare le impostazioni in seguito non cambia mai il suo prezzo.
- Nuova schermata WooCommerce › Iscriviti e Risparmia con regole ordinate per condizioni (prezzo sopra o sotto un importo, categoria, etichetta o prodotti specifici). Vince la prima regola che corrisponde. Le regole possono essere spostate, riordinate e cancellate in due passaggi.
- Il cliente può scegliere la frequenza di consegna all'interno dei periodi e limiti consentiti dal negozio, a meno che il prodotto non la blocchi.
- Nel carrello classico, ogni riga che lo consente può essere cambiata tra acquisto unico e abbonamento, con la sua frequenza. I totali del carrello e del pagamento (classici e a blocchi) mostrano una riga con il risparmio di Iscriviti e risparmia.
- In Il mio account, il cliente può cambiare la quantità e la frequenza del suo abbonamento. La modifica si applica dalla successiva rinnovazione, con un'anteprima del nuovo importo e della nuova data.
- Ogni riga di un prodotto che offre entrambe le opzioni mostra «Acquisto: acquisto unico» o «Acquisto: abbonamento», con le sue condizioni, nel carrello, nel pagamento (classico e a blocchi), nell'ordine, in Il mio account, nella conferma dell'ordine e nelle email. Un abbonamento di N unità viene creato e rinnovato per N unità.
- I tratti di sconto di rinnovo possono sommarsi allo sconto di Iscriviti e risparmia o applicarsi dopo di esso: prima Iscriviti e risparmia mentre dura e poi i tratti (è un'impostazione). Un cambio di piano prende i tratti del nuovo prodotto.
- Traduzione in italiano inclusa: tutto il plugin, con i gateway inclusi di Redsys, Bizum, Google Pay e Inespay. Un negozio in italiano non mostra più testi in inglese al pagamento, in Il mio account, nelle email o nelle impostazioni.
- Aggiornando, gli abbonamenti che si rinnovano con un ciclo diverso da quello del loro prodotto appaiono in un avviso di amministrazione con il pulsante «Allinea con il prodotto» per allinearli.
Corretto:
- Le traduzioni incluse nella cartella
languages/del plugin vengono caricate realmente. In WordPress 6.7 e versioni successive venivano cercate in una cartella che non esiste, quindi venivano applicate solo quelle installate inwp-content/languages/plugins/. - Un abbonamento cancellato dal cliente in Il mio account, o dal negozio dall'amministrazione, ora termina realmente. Se non aveva una data di fine rimaneva per sempre in «In attesa di cancellazione»: non veniva mai cancellato, l'email di abbonamento cancellato non veniva inviata e un negozio che dà accesso in base allo stato dell'abbonamento continuava a farlo. Ora viene cancellato quando termina il periodo già pagato. Nuovo filtro
aswc_prepaid_term_end. - Un nuovo tentativo di pagamento addebita ogni periodo al massimo una volta. Con un addebito in sospeso, o con uno scaduto dopo che la banca lo ha approvato, il nuovo tentativo poteva creare e addebitare un secondo rinnovo dello stesso periodo.
- Quando un nuovo tentativo paga un rinnovo fallito con un nuovo ordine di rinnovo, il cliente non può più pagare anche l'ordine fallito (nel pagamento, in Il mio account o con l'azione di amministrazione «Riprova pagamento ordine in sospeso»). Se c'era già un pagamento in corso quando è stato eseguito il nuovo tentativo, viene contrassegnato in entrambi gli ordini affinché tu decida il rimborso.
- Due esecuzioni di rinnovo simultanee per lo stesso abbonamento (più lotti di Action Scheduler, o un esecutore di WP-CLI insieme a WP-Cron) non possono più addebitarlo entrambe.
- Stripe: un rinnovo la cui risposta si perde (un timeout scaduto, un server che si ferma a metà richiesta, un errore di un proxy) non viene più contrassegnato come fallito, il che lo lasciava pagabile e permetteva a un nuovo tentativo di addebitare il periodo due volte. Ora rimane in attesa con una nota nell'ordine, non viene nuovamente addebitato nel frattempo e si consulta in Stripe un'ora dopo: si completa se l'addebito è stato effettuato e passa ai normali nuovi tentativi se non lo è.
- Stripe: mentre un rinnovo è trattenuto in attesa di confermare il suo addebito, riattivare l'abbonamento non consente alla successiva esecuzione di creare e addebitare un altro rinnovo dello stesso periodo. La trattenuta viene annotata anche nell'abbonamento.
- Stripe: un avviso tardivo di «pagamento fallito» non fa più fallire un rinnovo già pagato. Stripe e PayPal: un rinnovo non ripristina più la carta che il cliente aveva sostituito.
- PayPal: quando PayPal non risponde (timeout scaduto, errore di connessione o errore del server), il rinnovo rimane trattenuto per la tua revisione, invece di essere contrassegnato come fallito e riprovato, il che poteva addebitarlo due volte.
- PayPal e WooPayments: un rinnovo non rimane mai pagabile quando il plugin di pagamento fallisce con un errore interno dopo aver inviato l'addebito. Quelli di PayPal rimangono trattenuti per la tua revisione e quelli di WooPayments vengono conciliati. Prima, un nuovo tentativo poteva addebitarli per la seconda volta.
- Un abbonamento senza un ciclo di fatturazione valido non si rinnova più ogni giorno: prende il ciclo del suo prodotto o viene messo in attesa e non viene mai addebitato. Né viene addebitato da un nuovo tentativo di pagamento né dalle azioni manuali del negozio (Crea Ordine di Rinnovo in Sospeso, Riprova Pagamento Ordine in Sospeso e Riprova Pagamento Rinnovo), che ora lo rifiutano con una nota.
- Aggiornando alla 3.0.0, gli abbonamenti senza ciclo di fatturazione prendono quello del loro prodotto.
- L'intervallo di fatturazione di un prodotto di abbonamento, e quello di ogni variazione, non è più pre-selezionato in «Giorni»: deve essere scelto, o il prodotto non viene salvato come abbonamento.
- Il «Pagamento» e il «Periodo di Fatturazione» di un abbonamento esistente vengono salvati dalla sua casella di programmazione, e un ciclo vuoto non viene più mostrato come «Giorni».
- I controlli del ciclo di fatturazione accettano periodi aggiunti da altri plugin, non modificano mai un abbonamento solo per mostrarlo e inviano al negozio al massimo un'email al giorno riguardo agli abbonamenti senza ciclo.
- Un abbonamento con periodo di prova si rinnova il giorno in cui termina la prova, non il giorno in cui è stato acquistato (il secondo addebito arrivava meno di un mese dopo il primo).
- Un nuovo abbonamento viene datato nel momento reale in cui viene creato. La sua data di creazione era l'ora locale del negozio salvata come UTC, quindi in un negozio a est di UTC appariva più tardi del reale (due ore in Spagna in estate) e i nuovi abbonamenti venivano ordinati sotto altri più vecchi. Gli abbonamenti creati prima della 3.0.0 mantengono la loro data.
- Un ordine di rinnovo pagato dal cliente viene registrato: un rinnovo fallito pagato nella pagina di pagamento dell'ordine, o un rinnovo manuale, ora sposta la data del prossimo pagamento di un intervallo e programma quel pagamento. Prima l'abbonamento tornava attivo senza nulla programmato e non veniva mai rinnovato.
- Un rinnovo senza nulla da pagare (un coupon ricorrente del 100%) viene registrato come qualsiasi altro: l'abbonamento rimane attivo e il suo prossimo rinnovo viene programmato.
- Il controllo giornaliero della programmazione ripristina l'azione di pagamento mancante nei negozi con archiviazione degli ordini ad alte prestazioni (HPOS). Cercava gli abbonamenti solo tra le voci e non ne trovava nessuno.
- Un abbonamento o un ordine annullato, rimborsato o scaduto dopo aver programmato la sua data di inizio non viene più attivato quando arriva quella data.
- Un abbonamento eliminato, annullato da un amministratore o rimborsato mentre un rinnovo fallito aspetta il suo nuovo tentativo non mantiene più quel tentativo programmato.
- Riattivare un abbonamento in pausa in Il mio account non programma più un nuovo tentativo di pagamento.
- Un rimborso totale del primo ordine di un abbonamento lo annulla di nuovo. Il negozio trattava quel primo ordine come un rinnovo, quindi un cliente rimborsato rimaneva iscritto e veniva addebitato nel prossimo rinnovo.
- I tratti di sconto di rinnovo arrivano a tutti i rinnovi per cui sono stati configurati: il contatore dei rinnovi pagati non avanzava mai, quindi un tratto che iniziava dal secondo rinnovo o più tardi non veniva mai applicato. Ora ogni rinnovo pagato conta una volta, e un rinnovo rimborsato continua a contare.
- Modificare i tratti di sconto di rinnovo di un prodotto non cambia più il prezzo degli abbonamenti esistenti. I tratti vengono salvati all'inizio dell'abbonamento e vengono mantenuti così come sono stati venduti, anche quelli dei coupon.
- I tratti di sconto di rinnovo configurati in un coupon, e i tratti per ruolo cliente, si applicano ora ai rinnovi. Venivano salvati, ma non venivano mai utilizzati. Quelli di un coupon si applicano anche a un prodotto senza tratti propri, anche se "Override Product Discounts" è deselezionato.
- Il pagamento non termina più con un errore fatale quando il prodotto ha tratti di sconto di rinnovo.
- Lo sconto del primo pagamento si applica una sola volta e solo al primo pagamento. Si applicava due volte e si trascinava a tutti i rinnovi. Non si applica a un periodo di prova né a un cambio di piano.
- Un prodotto con sconto sul primo pagamento mostra nel pagamento il suo prezzo reale di rinnovo. I due checkout mostrano il primo pagamento scontato come prezzo di tutti i rinnovi, anche se i rinnovi venivano addebitati al prezzo pieno.
- Un prodotto con periodo di prova acquistato con un coupon ricorrente si rinnova al suo prezzo scontato. Veniva salvato con un importo di rinnovo di 0 e si rinnovava gratuitamente.
- La quota di attivazione viene addebitata una volta per abbonamento, qualunque sia l'importo. Un abbonamento acquistato con quantità 3 pagava la quota tre volte.
- Con i prezzi inseriti con tasse incluse, il totale ricorrente dell'abbonamento viene salvato arrotondato ai decimali del negozio.
- Cambi di piano: il cambio viene addebitato alla data del prossimo pagamento che mostra l'abbonamento, e la nuova data viene conteggiata dal cambio (prima un upgrade regalava un periodo intero). Un cambio non concede mai il periodo di prova del nuovo prodotto; il credito del periodo non utilizzato è ciò che è stato realmente pagato per esso; viene rifiutata una seconda linea di cambio per lo stesso abbonamento e un ordine di cambio confermato due volte viene applicato una sola volta.
- Cambi di piano con ripartizione: il credito dell'abbonamento precedente si applica una volta per linea, non una volta per unità.
- Un cambio di piano a una variazione che prende il periodo di fatturazione del prodotto variabile viene riconosciuto per quello che è. Prima veniva sempre trattato come un downgrade, qualunque fossero i prezzi.
- Un downgrade a una variazione che eredita l'intervallo del suo prodotto padre riceve il suo credito. Veniva calcolato come infinito e non veniva mai applicato.
- Un cambio di piano mantiene la fatturazione di un abbonamento senza data di fine quando il suo credito viene aggiunto come giorni, inizia il nuovo periodo il giorno del cambio e conserva i tratti di sconto di un coupon di attivazione.
- "Stop Downgrade" e "Allow switching only to the same interval" sono disattivati a meno che tu non li selezioni. Una volta salvate le impostazioni, venivano lette come attivate e venivano rifiutati tutti i downgrade e tutti i cambi tra intervalli.
- Giorno di rinnovo sincronizzato: il primo rinnovo mensile è il giorno di questo mese se non è già passato; tutti i rinnovi rimangono in quel giorno; la scheda del prodotto annuncia la data che viene addebitata; "Ultimo giorno del mese" rinnova l'ultimo giorno di ogni mese, e un sito a est di UTC non anticipa più un giorno il primo rinnovo alla fine della sua giornata.
- "Let the customer choose the expiry" in un abbonamento variabile: il campo di scadenza offre il periodo di fatturazione del prodotto (prima cadeva in "Giorni") e viene rifiutata una scadenza più corta dell'intervallo di fatturazione. Lo stesso vale per un abbonamento creato da una vendita aggiuntiva di CartFlows.
- Il limite di cancellazioni di periodi di prova di un prodotto si applica: dopo il numero indicato di prove cancellate, il cliente non può più cancellare la successiva.
- Il blocco di Pagamento mostra nel riepilogo dell'ordine il periodo di fatturazione ("/ 1 mese"), come già faceva il blocco di Carrello.
- Le cifre di rinnovo del blocco di Pagamento seguono il carrello: dopo un coupon o un cambio di quantità o di spedizione non rimangono più con gli importi precedenti fino a ricaricare la pagina.
- Blocco di Pagamento: il primo addebito di una prova gratuita (la quota di attivazione, o nulla) non appare più come un'offerta. La linea mostra ciò che viene addebitato ora, la prova e il prezzo di rinnovo.
- Un prodotto variabile che mescola variazioni di abbonamento e di acquisto unico non mostra più il suo intervallo di prezzi con un periodo di fatturazione, presentando il prezzo di acquisto unico come mensile. Nuova funzione ausiliaria e filtro.
aswc_variable_product_has_one_time_variation(). - L'icona della carta di Redsys (e le icone predefinite delle altre gateway incluse) non occupa più tutta la casella di pagamento nel checkout classico con un tema a blocchi. Il tuo logo non viene toccato.
- Gateway Redsys inclusa: un rinnovo addebitato con la carta salvata non la salva di nuovo. Ogni rinnovo aggiungeva un'altra carta identica all'account del cliente. Durante l'aggiornamento vengono rimossi i duplicati salvati dalle versioni precedenti, mantenendo quella utilizzata dai rinnovi.
- Redsys: un rinnovo addebita la carta salvata più recente del cliente, non la più vecchia, e una carta già salvata non viene mai salvata di nuovo per i clienti con più di dieci carte.
- Una cancellazione in Redsys, Bizum o Google Pay annulla l'ordine nel negozio. Prima rimaneva in sospeso.
- I pagamenti con contrassegno, bonifico o assegno, e gli abbonamenti manuali, inviano al cliente la fattura di rinnovo con il link per pagarla. Prima il cliente non sapeva nulla fino a quando il negozio utilizzava "Retry Renewal Payment". Nuovo filtro.
aswc_send_manual_renewal_invoice. - "Retry Renewal Payment" viene nuovamente offerto in un ordine di rinnovo in sospeso, e l'email che riceve il negozio su un rinnovo fallito indica che è un rinnovo e nomina il suo abbonamento.
- Il negozio riceve una sola volta l'email di un rinnovo fallito. Il plugin inviava la propria copia insieme a quella di WooCommerce.
- L'email di promemoria di rinnovo viene inviata prima del rinnovo quando il negozio lo attiva. Veniva programmata e non veniva mai inviata.
- L'email "Subscription on hold to active" viene inviata quando il negozio riattiva un abbonamento in attesa dalla sua schermata di modifica.
- L'oggetto predefinito di cinque email (annullata, scaduta, in attesa, in pausa e riattivata) scriveva male "Subscription".
- I collegamenti dell'amministrazione alla schermata degli abbonamenti tornano a funzionare: il collegamento delle impostazioni del plugin, quello dell'abbonamento nelle note dell'ordine, il ritorno dopo aver messo in pausa, riattivato o annullato, "Go Back" e l'esportazione CSV terminavano in "Mi dispiace, non hai permessi per accedere a questa pagina".
- Il cestino della lista degli abbonamenti offre "Ripristina" e "Elimina permanentemente", per ripristinare o eliminare un abbonamento specifico.
- Il percorso REST
aswc-view-subscriptionrestituisce gli abbonamenti. Filtrava per una chiave di metadati senza il suo trattino basso e non restituiva nulla. - Scompare un errore di JavaScript nelle pagine del carrello e di pagamento classiche: lo script dei blocchi veniva eseguito dove non ci sono blocchi.
- WordPress 6.7 e versioni successive non registrano più l'avviso "translation loading was triggered too early" in ogni richiesta. Scompaiono anche due avvisi di PHP nel negozio e nella schermata di modifica del prodotto.
- Il modello di traduzione (.pot) torna a coprire tutti i testi: circa 360 non potevano essere tradotti, tra cui l'email HTML della fattura di rinnovo.
- Accessibilità: tutti i campi del pannello di abbonamento del prodotto (semplice, multiprodotto e per variazione) hanno ora un nome che annuncia il lettore di schermo.
- Salvare un abbonamento all'inizio di una richiesta di amministrazione (ad esempio, da admin-ajax o admin-post) non termina più con un errore fatale.
- Disinstallare il plugin elimina anche i suoi dati transitori.
Sicurezza:
- Redsys, Bizum e Google Pay accettano solo il risultato di un pagamento quando la sua firma è valida. Un ritorno falsificato al negozio poteva contrassegnare un ordine come pagato.
- Le notifiche di pagamento di Inespay vengono autenticate. Una notifica il cui importo firmato non corrisponde all'ordine rimane in attesa, e una notifica ripetuta per un ordine già pagato viene ignorata.
- I link di amministrazione per mettere in pausa e riattivare un abbonamento richiedono il permesso di modificare gli ordini, un link valido e lo stato atteso. Una riattivazione poteva essere attivata senza aver effettuato il login.
- I controlli di licenza e aggiornamenti verificano sempre il certificato del server, e un pacchetto di aggiornamento viene accettato solo se proviene dal server di licenze tramite https.
- Nella Mia account, i dettagli di un abbonamento, la sua lista di rinnovi e il suo cambio di metodo di pagamento (incluso Stripe) sono disponibili solo per il cliente a cui appartiene.
- Le azioni del cliente per mettere in pausa, riattivare e cancellare vengono decise in base allo stato salvato dell'abbonamento e alle impostazioni del negozio, quindi non è più possibile saltare il termine minimo né il limite di cancellazioni di prova. Un link mostrato prima dell'aggiornamento fallisce una volta; ricaricando la pagina appare uno che funziona.
- La data di inizio inviata da un cliente viene accettata solo se è una di quelle offerte dal prodotto.
- Il blocco di Pagamento crea sempre l'abbonamento quando il carrello lo contiene; un parametro della richiesta poteva saltarlo.
- Un cambio di piano dà credito solo per prorrateo per un abbonamento proprio e attivo del cliente, e ogni credito viene speso una sola volta. Un periodo rimborsato non genera credito.
- Rafforzamenti dell'audit di sicurezza della 3.0.0: le routine di aggiornamento e la configurazione del vault di PayPal vengono eseguite solo per gli amministratori; l'azione massiva di data di inizio personalizzata controlla l'utente e la richiesta; un'azione di fine periodo termina solo gli abbonamenti che aspettano di terminare; il ripristino della programmazione non riprova mai le trattenute decise dal negozio, e i gateway Redsys inclusi non scrivono più la chiave di firma nel log di debug.
- La scheda degli sconti del prodotto e i campi di sconto di ogni variazione vengono salvati solo per un utente che può modificare quel prodotto (difesa in profondità).
Sviluppo:
- È stato rimosso il selettore «Acquisto una tantum / Abbonamento» che veniva stampato sotto il prezzo; è sostituito dal nuovo widget. L'azione AJAX
aswc_onetime_purchaseè ancora registrata come obsoleta e non fa nulla (viene registrata nel log al massimo una volta al giorno conWP_DEBUG). Consultadocs/reference/hooks-and-extension-points.md. - È stato rimosso
ASWC_Admin::aswc_admin_reactivate_onhold_subscription()e il suo hook diinit: era il gestore di un link che nessuno schermo mostrava. - Nuovi filtri:
aswc_prepaid_term_end,aswc_send_manual_renewal_invoiceeaswc_variable_product_has_one_time_variation.
Compatibilità:
- Testato fino a WordPress 7.1 e WooCommerce 11.1.0.
- Richiede WordPress 6.5 o superiore, WooCommerce 8.0 o superiore e PHP 7.4 o superiore.
- Completamente compatibile con l'archiviazione degli ordini ad alte prestazioni di WooCommerce (HPOS) e con i blocchi di Carrello e Pagamento.
- Continua a funzionare in modo autonomo, senza dipendere dall'estensione WooCommerce Subscriptions.







