Se gestisci un negozio WooCommerce, potresti trovarti nella situazione in cui alcuni prodotti vengono generati automaticamente da altri plugin (come quelli per la prenotazione o la gestione di eventi). Con il tempo, il database potrebbe riempirsi di prodotti obsoleti o inutilizzati, rallentando il sito e occupando spazio prezioso.
Per fortuna, c’è una soluzione semplice: puoi impostare un codice personalizzato che elimina automaticamente i prodotti WooCommerce ogni 10 giorni, mantenendo il database sempre pulito e performante. In questa guida ti mostrerò come farlo utilizzando WPCode Lite, un plugin gratuito e facile da usare.
Perché questo codice è utile?
Questo sistema è particolarmente utile per chi utilizza plugin che generano prodotti dinamicamente, come:
- Plugin di prenotazione
- Plugin per la gestione di eventi
- Vendi online creando manualmente i prodotti di volta in volta
1. Installazione di WPCode Lite
Per prima cosa, dobbiamo installare il plugin WPCode Lite, che ci permette di aggiungere codice personalizzato senza modificare direttamente i file del tema.
Passaggi per installare WPCode Lite:
- Vai su Plugin > Aggiungi nuovo nel pannello di amministrazione di WordPress.
- Cerca “WPCode Lite” nella barra di ricerca.
- Clicca su Installa ora e poi su Attiva.
Ora siamo pronti per aggiungere il codice che si occuperà di eliminare automaticamente i prodotti ogni 10 giorni.
2. Aggiunta del codice per eliminare i prodotti WooCommerce
Ora che il plugin è installato, possiamo aggiungere il nostro codice personalizzato.
Ecco come fare:
- Vai su Snippet Code > Aggiungi Nuovo.
- Assegna un titolo al tuo snippet (ad esempio: “Elimina prodotti ogni 10 giorni”).
- Seleziona “Snippet PHP” come tipo di codice.
- Incolla il codice che trovi qui sotto.
- Attiva lo snippet e assicurati che sia impostato per essere eseguito ovunque nel sito.
Ecco il codice da inserire:
// Imposta la data di scadenza del prodotto per il test (10 giorni)
function set_delete_product_meta($id) {
if (!is_numeric($id) || get_post_type($id) !== 'product') {
return;
}
// Controlla se la scadenza è già impostata
$expiry_set = get_post_meta($id, 'product_expiry_scheduled', true);
if (!$expiry_set) {
// Calcola la data di scadenza (10 giorni)
$expiration_time = strtotime("+10 days");//puoi modificare il valore per cambiare il numero dei giorni
// Pianifica l'eliminazione del prodotto
wdm_schedule_product_deletion($expiration_time, $id);
// Salva la data di scadenza nel meta del prodotto
update_post_meta($id, 'product_expiry_scheduled', $expiration_time);
}
}
add_action('wp_insert_post', 'set_delete_product_meta');
// Pianifica l'eliminazione di un prodotto
function wdm_schedule_product_deletion($remove_date, $id) {
if (wp_next_scheduled('wdm_remove_product', array($id)) === false) {
wp_schedule_single_event($remove_date, 'wdm_remove_product', array($id));
}
}
// Elimina il prodotto
function wdm_remove_product($id) {
$product = get_post($id);
if (!$product || $product->post_type !== 'product') {
return false;
}
// Elimina definitivamente il prodotto
wp_delete_post($id, true);
}
add_action('wdm_remove_product', 'wdm_remove_product');
// Pulisce gli eventi cron obsoleti
add_action('before_delete_post', function ($post_id) {
if (get_post_type($post_id) === 'product') {
wp_clear_scheduled_hook('wdm_remove_product', array($post_id));
}
});
3. Verifica e Ottimizzazione
Dopo aver attivato lo snippet, puoi verificare se tutto funziona correttamente:
- Se vuoi testare il codice subito, puoi modificare “+10 days” con “+1 minutes”. In questo modo il codice cancellerà i prodotti dopo un minuto circa
- Tieni in considerazione che il codice ha effetto solo sui nuovi prodotti, quindi potresti aver bisogno di cancellare tutto manualmente la prima volta; dopo il codice interverrà su tutti i nuovo prodotti creati o generati dal tuo plugin!
Come funziona il codice?
- Impostazione della Scadenza del Prodotto
Quando un nuovo prodotto viene creato o aggiornato, la funzione set_delete_product_meta verifica se è di tipo “product”. Se lo è e non ha già una data di scadenza impostata, calcola una data di scadenza (10 giorni nel futuro) e pianifica l’eliminazione del prodotto tramite un evento cron. La data di scadenza viene salvata come meta dato del prodotto per evitare di pianificare più volte la stessa eliminazione. - Pianificazione dell’Eliminazione
La funzione wdm_schedule_product_deletion si occupa di pianificare l’evento cron che eliminerà il prodotto alla data di scadenza. Prima di pianificare un nuovo evento, controlla se ce n’è già uno esistente per lo stesso prodotto e lo cancella, evitando duplicati. - Eliminazione del Prodotto
Quando arriva la data di scadenza, l’evento cron attiva la funzione wdm_remove_product, che elimina definitivamente il prodotto dal database utilizzando wp_delete_post. Prima di procedere, verifica che il prodotto esista ancora e sia di tipo “product”. - Pulizia degli Eventi Cron Obsoleti
Se un prodotto viene eliminato manualmente (ad esempio dall’amministratore), l’hook before_delete_post cancella eventuali eventi cron pianificati per quel prodotto, evitando che rimangano eventi inutili nel sistema.
Perché Funziona Bene?
- Automazione: Il codice elimina automaticamente i prodotti dopo 10 giorni senza intervento manuale.
- Sicurezza: Include controlli per assicurarsi che solo i prodotti validi vengano elaborati.
- Pulizia: Gestisce gli eventi cron obsoleti per mantenere il sistema efficiente.
- Scalabilità: È progettato per funzionare anche su siti con molti prodotti.
In sintesi, questo codice mantiene il tuo database WooCommerce pulito eliminando automaticamente i prodotti vecchi o inutilizzati ogni 10 giorni, garantendo prestazioni ottimali per il tuo sito WordPress! 😊
Contattami a info@azzarowebdesigner.it per eventuale assistenza!