Ottimizzazione e Pulizia di Action Scheduler per Eventi Stripe su WooCommerce

I pagamenti con Stripe richiedono risposte istantanee. Quando un cliente completa il checkout, WooCommerce elabora i webhook in background. Questo processo si affida ad Action Scheduler, il motore di esecuzione in coda integrato nel plugin.

Se la coda si blocca, gli ordini restano fermi. Ricevi i fondi su Stripe, ma lo store non aggiorna lo stato. Questo inconveniente crea problemi contabili e genera ticket di supporto. Se riscontri carrelli congelati, consulta anche la nostra guida su ordini bloccati in attesa di pagamento.

In questa guida vedremo come ottimizzare Action Scheduler per azzerare i ritardi di elaborazione. Puliremo le tabelle sovraccariche nel database e velocizzeremo i webhook di Stripe.

Come Funziona Action Scheduler con i Webhook di Stripe

Action Scheduler funziona come un sistema di code asincrono per WordPress. Gestisce processi pesanti senza rallentare la navigazione degli utenti sul sito.

Il ciclo di vita degli eventi Stripe

Quando un cliente effettua un pagamento con carta, Stripe genera un evento. Questo evento viene inviato all’endpoint del tuo sito tramite webhook. Il gateway WooCommerce Stripe riceve la notifica HTTP e crea un’azione in coda. Action Scheduler registra il task nella tabella del database wp_actionscheduler_actions. Successivamente un worker elabora l’attività, convalida il token e contrassegna l’ordine come completato.

Perché la coda di elaborazione rallenta

Nei negozi con molti ordini le tabelle possono accumulare milioni di righe. I log storici occupano spazio inutile nel database. Di conseguenza, le query diventano lente. Il sistema non riesce a elaborare i task pendenti nei tempi previsti. I ritardi accumulati fanno scadere le sessioni di pagamento e bloccano la sincronizzazione dei dati.

Diagnostica Avanzata: Analizzare lo Stato delle Code

Prima di intervenire con modifiche tecniche, devi valutare lo stato attuale delle azioni. WordPress fornisce un pannello diagnostico dedicato dentro WooCommerce.

Verifica da bacheca WordPress

Accedi alla tua bacheca di amministrazione. Segui questo percorso: WooCommerce > Stato > Azioni. Qui troverai la panoramica completa suddivisa per schede:

  • In attesa: azioni pronte da eseguire.
  • In corso: task attualmente in elaborazione dai worker.
  • Completate: operazioni terminate con successo.
  • Non riuscite: azioni fallite a causa di errori critici o timeout.
  • Annullate: task eliminati dal sistema o dai plugin.

Se la scheda In attesa supera diverse centinaia di elementi, il sistema è congestionato. Se noti molte azioni Non riuscite con hook contenenti woocommerce_stripe, c’è un blocco strutturale. Esistono vari motivi per cui devi ottimizzare Action Scheduler sul tuo negozio WooCommerce per evitare la perdita di dati contabili.

Individuare i colli di bottiglia nel database

Action Scheduler utilizza quattro tabelle proprietarie nel database MySQL:

  • wp_actionscheduler_actions
  • wp_actionscheduler_logs
  • wp_actionscheduler_groups
  • wp_actionscheduler_claims

La tabella dei log tende a saturare i limiti di memoria del database. Nei server condivisi questo genera blocchi I/O continui.

L’accumulo di log vecchi oltre 30 giorni è la causa principale dei timeout sui webhook di Stripe. Una tabella pulita assicura query istantanee.

Pulizia del Database: Rimuovere Log e Azioni Obsolete

Rimuovere i dati non necessari è il primo passo per ripristinare le prestazioni. Puoi intervenire tramite codice, plugin o query dirette.

Ridurre il periodo di conservazione dei log via PHP

Per impostazione predefinita, Action Scheduler conserva le azioni completate per 30 giorni. Nei siti ad alto traffico questo intervallo temporale è eccessivo. Puoi ridurre la conservazione a 3 o 5 giorni. Aggiungi questo snippet nel file functions.php del tuo tema child o tramite un plugin per snippet:

add_filter( 'action_scheduler_retention_period', function() {
    return 3 * DAY_IN_SECONDS;
} );

Questo codice forza lo svuotamento automatico delle azioni concluse dopo 72 ore. In questo modo il database rimane leggero e scattante.

Pulizia manuale delle tabelle tramite SQL

Se il pannello di controllo è inaccessibile o bloccato, puoi eseguire una query di pulizia su phpMyAdmin. Esegui sempre un backup completo del database prima di procedere. Ecco il comando SQL per eliminare i log orfani e le azioni concluse:

DELETE FROM wp_actionscheduler_actions WHERE status IN ('complete', 'canceled', 'failed') AND last_attempt_gmt < NOW() - INTERVAL 7 DAY;
DELETE FROM wp_actionscheduler_logs WHERE action_id NOT IN (SELECT action_id FROM wp_actionscheduler_actions);

Dopo l’eliminazione esegui il comando OPTIMIZE TABLE wp_actionscheduler_actions, wp_actionscheduler_logs; per deframmentare gli indici su disco.

Configurare un Cron Reale a Livello di Server

L’elaborazione predefinita dipende dalle visite degli utenti tramite il sistema WP-Cron virtuale. Se il traffico cala, i webhook restano in sospeso. Se il traffico esplode, i worker consumano troppe risorse PHP.

Disabilitare il cron virtuale di WordPress

La soluzione migliore per ottimizzare Action Scheduler consiste nel disaccoppiare i task da WP-Cron. Apri il file wp-config.php via SSH o FTP. Inserisci la seguente riga subito prima del messaggio di blocco modifiche:

define( 'DISABLE_WP_CRON', true );

Ora WordPress non avvierà più le attività pianificate a ogni caricamento pagina.

Impostare il crontab di sistema su Linux

Accedi al tuo server tramite terminale o tramite il pannello cPanel. Crea un processo cron reale che gira ogni minuto. Usa questo comando standard via crontab:

* * * * * php /var/www/html/wp-cron.php >/dev/null 2>&1

In questo modo Action Scheduler riceverà un trigger puntuale ogni 60 secondi. Gli eventi inviati da Stripe verranno presi in carico quasi in tempo reale.

Aumentare la frequenza e la concorrenza con WP-CLI

Se gestisci centinaia di transazioni orarie, puoi elaborare le code direttamente con WP-CLI. Esegui il worker dedicato ogni due minuti tramite terminale:

*/2 * * * * wp action-scheduler run --path=/var/www/html --batch-size=100 >/dev/null 2>&1

Questo parametro aumenta il batch a 100 elementi contemporanei. Il server elaborerà i pacchetti senza subire i timeout tipici del server web Nginx o Apache.

Regolare la Concorrenza dei Worker e Proteggere i Webhook

Per concludere l’ottimizzazione, devi calibrare la potenza di calcolo allocata ai processi in background.

Aumentare il numero di worker paralleli

Di default Action Scheduler usa un singolo worker simultaneo per evitare conflitti di scrittura. Se il server dispone di buone risorse hardware, puoi incrementare i thread paralleli:

add_filter( 'action_scheduler_queue_runner_concurrent_batches', function() {
    return 3;
} );

Questo filtro permette di processare tre blocchi di azioni nello stesso istante. I pagamenti Stripe verranno confermati senza attendere la conclusione di altri task asincroni.

Monitorare gli errori di connessione Stripe

Verifica sempre il registro dei log su WooCommerce > Stato > Log. Seleziona i file con prefisso stripe. Se visualizzi errori come Signature verification failed o cURL timeout, il server rifiuta i pacchetti in ingresso. Assicurati che l’indirizzo IP di Stripe non sia bloccato da firewall server o plugin di sicurezza come Wordfence.

Domande Frequenti su Action Scheduler e Stripe

Cosa succede se svuoto la tabella delle azioni in attesa?

Non cancellare le azioni con stato In attesa se sono collegate a pagamenti recenti. Rischieresti di interrompere l’elaborazione dei webhook. In quel caso gli ordini rimarrebbero bloccati e non scalerebbero le scorte di magazzino. Cancella solo gli stati completati, falliti o annullati.

Posso usare WP-CLI per ottimizzare Action Scheduler senza rallentare il server?

Sì, l’elaborazione da riga di comando è il metodo più sicuro ed efficiente. Il comando esegue PHP direttamente in background senza passare dal web server, evitando timeout HTTP e garantendo massima fluidità di navigazione agli acquirenti.

I webhook di Stripe riprovano l’invio in caso di errore?

Sì, Stripe adotta una politica di retry automatico per circa tre giorni. Se il server risponde con un errore 500 o va in timeout, Stripe ritenta la consegna a intervalli crescenti. Se non correggi Action Scheduler, i tentativi falliranno definitivamente e l’ordine rimarrà orfano.

Articoli simili