Woocommerce caricamento infinito con rotazione spinner inifinito nella pagina di checkout

Woocommerce caricamento infinito con rotazione spinner inifinito nella pagina di checkout

Cart checkout endless loading spinner

Aggiornamenti e upgrade del sito web o del dominio possono provare condizioni di errore irreversibile che provocano blocchi di funzionamento al sistema di vendita attraverso woocommerce in wordpress.

 

Scenario

Si descrive il caso di un sito in wordpress mutlisite (network)

In un upgrade obbligatorio della versione PHP da 7.1.x a 7.2 e superiore, con conseguente cambio macchina ci si è trovati davanti alla impossibilità di poter procedere col checkout del carrello dovuto ad un infinito caricamento della pagina, che impediva la continuazione del procedimento.

Ovviamente prima del passaggio si era proceduto ai completi aggiornamenti di sicurezza, temi e plugin.

Ricordiamo che in questi casi i backup completi, in locale, del dominio e dei database è di rigore.

 

Eseguito il cambio macchina e controllato il funzionamento nei primi giorni non sono stati riscontrati problemi e sembrava che tutto fosse andato al meglio con upgrade definito riuscito con successo.

 

Mai gridare vittoria

 

nei giorni a seguire una brusca interruzzione nella ricezione degli ordini di acquisto ha fatto scattare i primi allarmi, che sono poi stati confermati dalle richieste degli utenti di non riuscire a completare l’ordine per un blocco nella pagina di inserimento dati ordine (checkout).

Il problema si presentava su tutti i siti web.

 

Il Fault tracing (Ricerca guasti)

Visto la tipologia di anomalia che influenzava tutto il network si ipotizzava un problema nella configurazione comune.

La ricerca guasti parte dai primi controlli di routine:

  • file .htaccess
  • file config.php
  • disattivazione dei plugin

Purtroppo nessuno di questi passaggi ha permesso di risolvere la problematica. escludendo la parte script ed impostazioni di woocommerce la ricerca parte nella possibilià di configurazione della nuova macchina.

Un valido aiuto nella risoluzione del problema è pervenuto da questa documentazione

Endless loading/spinner on the checkout page

Esclusi dopo i controlli problematiche nei richiami AJAX si è iniziato ad interpretare la problematica descritta

Transactional Emails causing trouble

 

Parlando di Transactional Emails causing trouble

Su alcuni server, l’invio di e-mail relative al checkout può causare problemi. È possibile abilitare il seguente filtro per differire l’invio delle e-mail fino a dopo l’invio dell’ordine, il che velocizza le cose:

add_filter( ‘woocommerce_defer_transactional_emails’, ‘__return_true’ );

La problematica era chiara, disguinbile e possibile, il test sul file function.php del tema ha risolto momentaneamente la problematica.

 

Soluzione

Il problema è stato risolto studiando il caso e le modifiche che sono state apportate su come possono influenzare il comportamento del sistema.

Ovviamente la modifica, essendo apportata sul file funciotion.php del tema necessita della generazione di un tema child (sempre consigliato) in maniera che i prossimi aggiornamenti possano ripresentare il problema.

 

Funzione di posta elettronica in background di WooCommerce

fonte: Dan Wich

WooCommerce ha la possibilità di rinviare / inviare in background le sue e-mail invece di inviarle durante l’elaborazione dell’azione intrapresa dal visitatore. Questo può avere alcuni vantaggi per i clienti che visitano il tuo negozio:

Se le loro azioni sullo store si bloccano durante l’invio di e-mail (come l’e-mail “nuovo account”), il rinvio delle e-mail può consentire al cliente di continuare con l’ordine.
Il sito può essere più reattivo perché viene eseguito meno lavoro per ogni azione eseguita dal cliente.
Tuttavia, la funzionalità di posta elettronica in background è più recente e meno testata.

L’impostazione predefinita corrente (al momento della stesura di questo documento nel luglio del 2019) è di inviare immediatamente le e-mail. Potresti imbatterti in altre pagine che menzionano le email differite come predefinite, ma questo perché l’impostazione predefinita è stata modificata due volte.

 

Abilitazione delle e-mail differite

L’aggiunta di questo codice al tuo functions.php (o un file plugin) provocherà l’invio di email in un’attività in background:

add_filter( ‘woocommerce_defer_transactional_emails’, ‘__return_true’ );

Oppure utilizza questo codice per garantire il comportamento predefinito (invio di email durante l’elaborazione della richiesta dell’utente) nel caso in cui sia stato modificato da altro codice:

add_filter( ‘woocommerce_defer_transactional_emails’, ‘__return_false’, PHP_INT_MAX );

Disattivazione dell’invio dell’e-mail differita / in background

Inizialmente pensavo che l’ woocommerce_allow_send_queued_transactional_emailhook sarebbe stato utile per disabilitare temporaneamente l’invio di posta in coda durante la risoluzione dei problemi. Ma per quanto ne so scavando nel codice , l’attività di posta elettronica verrà considerata “completata” indipendentemente dal fatto che sia consentito o meno essere inviata dal filtro. Tuttavia, se in qualche modo è utile, puoi disattivare l’invio con:

add_filter( ‘woocommerce_allow_send_queued_transactional_email’, ‘__return_false’ );

 

Come funziona dietro le quinte

Alto livello
WooCommerce utilizza la libreria WP Background Processing per gestire l’accodamento e l’esecuzione delle email in background. WC_Email funge da intermediario per le seguenti notifiche, inoltrandole alle loro versioni “reali” che hanno un suffisso “_notification”:

woocommerce_created_customer
woocommerce_low_stock
woocommerce_new_customer_note
woocommerce_no_stock
woocommerce_order_fully_refunded
woocommerce_order_partially_refunded
woocommerce_order_status_cancelled_to_completed
woocommerce_order_status_cancelled_to_on-hold
woocommerce_order_status_cancelled_to_processing
woocommerce_order_status_completed
woocommerce_order_status_failed_to_completed
woocommerce_order_status_failed_to_on-hold
woocommerce_order_status_failed_to_processing
woocommerce_order_status_on-hold_to_cancelled
woocommerce_order_status_on-hold_to_failed
woocommerce_order_status_on-hold_to_processing
woocommerce_order_status_pending_to_completed
woocommerce_order_status_pending_to_failed
woocommerce_order_status_pending_to_on-hold
woocommerce_order_status_pending_to_processing
woocommerce_order_status_processing_to_cancelled
woocommerce_product_on_backorder

Se un messaggio di posta elettronica personalizzato necessita di altre notifiche, è woocommerce_email_actionspossibile utilizzare il filtro per aggiungerlo all’array.

I dettagli

WC_Emails::init_transactional_emails aggancia le azioni di attivazione della posta elettronica di cui sopra queue_transactional_email per l’invio di email in background o send_transactional_email per l’invio immediato di email.

queue_transactional_email usa un’istanza di WC_Background_Emailer per accodare l’hook e i suoi argomenti per l’esecuzione successiva da parte di WP-Cron . Quando viene eseguito successivamente, richiama in WC_Emails::send_queued_transactional_email.

Se il woocommerce_allow_send_queued_transactional_emailfiltro (true per impostazione predefinita) lo consente, viene eseguito l’hook aggiunto con “_notification”, consentendo l’invio dell’email.

Non sembra esserci alcuna logica condizionale che consenta di riprovare in un secondo momento, quindi non credo woocommerce_allow_send_queued_transactional_emailsia un modo efficace per disabilitare temporaneamente le email che desideri inviare in seguito.

 

Circa Staff

Vedi anche

Wocommerce Wordpress Multisite

WooCommerce su WordPress Multisite – come, dove, perchè

Perchè WooCommerce su multisite? Quando conviene?Quando parliamo di WordPress e Woocommerce, parliamo di sistemi e-commerce …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *