Skip to content

Tutto per WordPress, lo sviluppo web — e non solo

🧹 Come rimuovere completamente un plugin WordPress: pulizia passo passo di database e file

🧹 Come rimuovere completamente un plugin WordPress: pulizia passo passo di database e file

Il tuo sito rallenta fino a bloccarsi, i backup lievitano a un gigabyte e phpMyAdmin mostra decine di tabelle con prefissi di plugin che hai "cancellato" un anno fa. Ti suona familiare?

Il pulsante standard "Elimina" nella sezione plugin si limita a rimuovere la cartella da wp-content/plugins. Tutto il resto (tabelle, opzioni, cron job, shortcode nei post) rimane nel database e su disco. Gli sviluppatori gestiscono la pulizia in modo diverso: alcuni fanno ordine diligentemente tramite uninstall.php, mentre altri lasciano tutto intatto.

Ecco un algoritmo completo per rimuovere un plugin senza lasciare traccia: dalla dashboard all'SQL manuale. Con backup in ogni fase e istruzioni precise per i plugin più diffusi.

💡 Panoramica rapida:

  • L'eliminazione tramite dashboard è solo il primo passo; tabelle, shortcode e cron job richiedono una pulizia separata
  • Prima di qualsiasi operazione sul database, esegui un backup completo (usando gli strumenti integrati dell'hosting o un plugin)
  • WooCommerce, Yoast SEO, Wordfence e altri plugin popolari hanno le proprie costanti e query SQL
  • Un plugin disattivato non è "spento" ma "dormiente"; i suoi file restano accessibili per accesso diretto e rappresentano un vettore d'attacco

Perché il pulsante "Elimina" non basta

WordPress richiama il file uninstall.php del plugin o un callback dal file principale quando lo si elimina. Ma questo funziona solo se lo sviluppatore ha creato tale file. In pratica, circa la metà dei plugin del catalogo WordPress.org è priva di uninstall.php o lo implementa in modo parziale: cancella la cartella ma lascia intatto il database.

Cosa rimane dopo l'eliminazione standard:

Tipo di residuo

Dove cercare

Rischio

Tabelle del database

wp_* (prefisso plugin)

Crescita del database, query più lente

Righe in wp_options

option_name LIKE %pluginname%

Opzioni autoload ingombre

Righe in wp_postmeta

meta_key LIKE %pluginname%

Dati morti durante il recupero dei post

Shortcode nel contenuto

Testo di post/pagine

[shortcode] non elaborato nel frontend

Cron job

wp_optionscron

Richieste HTTP non necessarie a wp-cron

File fuori dalla cartella plugin

wp-content/uploads/

Ingombro su disco

Regole in .htaccess

Root del sito

Conflitti con nuovi plugin

Le righe con il flag autoload sono particolarmente critiche: WordPress le carica a ogni richiesta. Cinquanta righe autoload extra aggiungono 30-80 ms al tempo di risposta del server. A prima vista sembra trascurabile, ma con 100.000 visualizzazioni mensili, l'impatto sulle prestazioni è notevole.

Disattivazione vs eliminazione: qual è la differenza

La differenza è fondamentale, ed è utile comprenderla prima di iniziare la pulizia.

Criterio

Disattivazione

Eliminazione completa

File del plugin

Restano in wp-content/plugins/

Cancellati

Codice

Non eseguito, disponibile per la lettura

Assente

Tabelle del database

Conservate

Dipende dallo sviluppatore

Impostazioni

Conservate

Dipende da uninstall.php

Aggiornamenti

Arrivano (per plugin gratuiti da.org)

Non arrivano

Vulnerabilità

Il codice sul server è un vettore d'attacco

Nessuna minaccia

Reversibilità

Un clic e il plugin è di nuovo attivo

Solo da backup

Un plugin disattivato non è "spento" ma "dormiente". I file PHP risiedono fisicamente sul server. Se viene scoperta una vulnerabilità nel codice, un utente malintenzionato può accedere direttamente al file tramite il percorso in wp-content/plugins/, aggirando la logica di WordPress. I firewall WAF non risolvono questo problema: la protezione migliore è rimuovere completamente il codice inutilizzato dal server.

La regola è semplice: se non usi un plugin da più di una settimana, eliminalo. Riconfigurarlo è più veloce che gestire una violazione attraverso un buco in un codice abbandonato.

Pulizia passo dopo passo: 4 fasi

Fase 1: Eliminazione tramite dashboard

La prima fase è standard. Vai su Plugin → Installati, trova quello che ti serve. I plugin attivi sono evidenziati con una barra blu, quelli disattivati no.

Clicca "Elimina" sotto il nome, conferma con il pulsante "Sì, elimina questi file". WordPress richiamerà il file uninstall.php del plugin (se esiste) e cancellerà la cartella da wp-content/plugins.

Elenco plugin WordPress con pulsante elimina

Per i plugin semplici (un widget leggero, la sostituzione del logo nella pagina di login), la pulizia finisce qui. Non creano tabelle né scrivono in wp_postmeta. Ma i plugin di caching, SEO, sicurezza, gallerie e page builder richiedono ulteriori interventi.

Fase 2: Pulizia dei file via FTP

Alcuni plugin creano cartelle al di fuori di wp-content/plugins/. Percorsi tipici:

  • wp-content/uploads/plugin-name/: cache, immagini compresse, file esportati
  • wp-content/ngg/: NextGEN Gallery
  • wp-content/ewww/: EWWW Image Optimizer
  • wp-content/backup/: plugin di backup

Collegati al server via FTP (FileZilla, WinSCP) o tramite il file manager dell'hosting. Vai a wp-content/, trova la cartella con il nome del plugin ed eliminala. Prima di cancellare, scarica la cartella in locale; se conteneva upload degli utenti, ripristinali.

I plugin di caching (WP Rocket, W3 Total Cache, LiteSpeed Cache) scrivono inoltre in wp-content/cache/ e creano wp-content/advanced-cache.php. Elimina manualmente il file advanced-cache.php via FTP, e in wp-config.php trova e rimuovi questa riga:

1define('WP_CACHE', true);

Fase 3: Rimozione degli shortcode dal contenuto

I plugin che aggiungono shortcode (form, gallerie, slider, tabelle) lasciano [shortcode] nudi nel testo dei post dopo l'eliminazione. L'effetto è disordinato e confonde i lettori.

Un modo rapido per silenziare gli shortcode inutilizzati è una riga nel file functions.php del tema attivo:

1add_shortcode('pluginshortcode', '__return_false');
Codice in functions.php per disabilitare shortcode plugin

Sostituisci pluginshortcode con il tag del tuo shortcode. Ad esempio: nggallery, gravityform o contact-form-7. La funzione __return_false restituisce false e lo shortcode scompare dal frontend senza essere rimosso dal testo del post.

Aggiungi il codice tramite un tema child o il plugin Code Snippets; le modifiche al file functions.php del tema padre andranno perse al prossimo aggiornamento. Se decidi di ripristinare il plugin in seguito, ti basterà rimuovere questa riga.

Fase 4: Pulizia del database

La fase più critica. Esegui un backup completo del database prima di qualsiasi query SQL di eliminazione; esportare tramite phpMyAdmin richiede mezzo minuto e ti salva da errori irreversibili.

4a. Trova le tabelle del plugin. Vai su phpMyAdmin (tramite cPanel o il pannello di amministrazione del tuo hosting), seleziona il database del sito. Cerca le tabelle con il prefisso del plugin: wp_wc_* (WooCommerce), wp_yoast_* (Yoast SEO), wp_wf* (Wordfence). Selezionale, scegli "Elimina" in fondo → conferma.

4b. Automazione tramite Advanced Database Cleaner. Se preferisci non lavorare direttamente in phpMyAdmin, installa Advanced Database Cleaner. Questo plugin gratuito scansiona il database, individua tabelle e record orfani e li elimina con un clic.

4c. Pulizia di wp_options. Anche se il plugin non ha creato tabelle separate, ha quasi sicuramente scritto in wp_options. Esegui in phpMyAdmin (scheda SQL):

1SELECT * FROM wp_options WHERE option_name LIKE '%pluginname%';

Sostituisci pluginname con parte del nome del plugin. Verifica che le righe appartengano effettivamente al plugin eliminato, poi:

1DELETE FROM wp_options WHERE option_name LIKE '%pluginname%';

4d. Pulizia dei cron job. Alcuni plugin registrano i propri eventi cron. Installa WP Crontrol; mostra tutti i cron job registrati in un unico elenco. Trova gli eventi con il nome del plugin ed eliminali manualmente.

Specifiche per la rimozione dei plugin più diffusi

Ogni plugin importante lascia una traccia unica. Di seguito trovi le istruzioni precise per i più comuni.

WooCommerce

WooCommerce crea oltre 16 tabelle nel database. Per far sì che vengano ripulite automaticamente alla cancellazione, aggiungi a wp-config.php (prima della riga /* That's all, stop editing! */):

1define('WC_REMOVE_ALL_DATA', true);

Questa costante obbliga WooCommerce a eseguire il suo uninstall.php completo al momento della cancellazione; tutte le tabelle wp_woocommerce_* e wp_wc_* saranno eliminate, inclusi prodotti, ordini e coupon. L'operazione è irreversibile, quindi il backup è obbligatorio.

Dopo aver eliminato il plugin, controlla anche wp_options, perché WooCommerce vi scrive decine di righe con il prefisso woocommerce_:

1SELECT * FROM wp_options WHERE option_name LIKE '%wc_%';
Query SQL per trovare record WooCommerce nel database

Se vengono trovate righe e il plugin è già stato cancellato, esegui la query DELETE con la stessa condizione.

Yoast SEO

Yoast SEO lascia record in wp_postmeta e wp_usermeta, oltre alle sue tabelle wp_yoast_indexable e wp_yoast_seo_links.

Per prima cosa, pulisci wp_postmeta:

1SELECT * FROM wp_postmeta WHERE meta_key LIKE '%yoast%';
Ricerca record meta Yoast SEO nella tabella wp_postmeta

Dopo aver confermato che si tratta di dati di Yoast, esegui:

1DELETE FROM wp_postmeta WHERE meta_key LIKE '%yoast%';

Poi, wp_usermeta:

1SELECT * FROM wp_usermeta WHERE meta_key LIKE '%yoast%';
Ricerca record Yoast SEO nella tabella wp_usermeta

Elimina ciò che trovi con una query DELETE analoga. Yoast registra anche l'evento cron wpseo_onpage_fetch; rimuovilo tramite WP Crontrol. Elimina manualmente le tabelle wp_yoast_indexable e wp_yoast_seo_links da phpMyAdmin.

Akismet

Akismet è il plugin standard per la protezione dallo spam dei commenti, preinstallato con WordPress. Dopo la cancellazione, i suoi dati restano in wp_commentmeta:

1SELECT * FROM wp_commentmeta WHERE meta_key LIKE '%akismet_%';
Query SQL per trovare dati Akismet nei commenti

Quindi:

1DELETE FROM wp_commentmeta WHERE meta_key LIKE '%akismet_%';

Se il sito ha migliaia di commenti, wp_commentmeta può pesare decine di megabyte. Dopo la pulizia, ottimizza la tabella:

1OPTIMIZE TABLE wp_commentmeta;

Altri metodi per combattere lo spam sono descritti nel nostro articolo come fermare lo spam nei commenti di WordPress: tutte le 18 soluzioni.

Gravity Forms

Gravity Forms crea 9 tabelle nel database (wp_gf_*, wp_rg_*). Prima di eliminarlo, vai su Forms → Impostazioni → Disinstalla e conferma. Poi cancella il plugin dalla dashboard.

Dopo l'eliminazione, controlla wp_options:

1SELECT * FROM wp_options WHERE option_name LIKE '%gravity%' OR option_name LIKE '%gf_%';
Query SQL per pulire wp_options di Gravity Forms

Elimina le righe trovate con una query DELETE analoga.

Wordfence

Wordfence è uno dei plugin di sicurezza più "pesanti": crea 23 tabelle con il prefisso wp_wf*. La disinstallazione standard dalla dashboard non le rimuove.

Il plugin ufficiale di supporto Wordfence Assistant è stato dismesso dallo sviluppatore a dicembre 2025. Quindi puliamo manualmente: cancella il plugin principale Wordfence dalla dashboard, poi accedi a phpMyAdmin ed esegui:

1SELECT * FROM wp_options WHERE option_name LIKE '%wordfence%' OR option_name LIKE '%wf%';

Elimina le righe trovate con una query DELETE usando la stessa condizione. Poi individua ed elimina tutte le tabelle con il prefisso wp_wf (di solito sono 23, da wp_wfblockediplog a wp_wflivetraffichuman). Via FTP, cancella la cartella wp-content/wflogs/ e il file wordfence-waf.php nella root del sito, se rimangono.

Il plugin crea 3 tabelle (wp_ngg_*) e una cartella wp-content/ngg/ con le gallerie caricate.

Per prima cosa, cancella il plugin dalla dashboard. Poi via FTP, elimina la cartella wp-content/ngg/, salvando prima le immagini delle gallerie se ti servono. In phpMyAdmin, esegui:

1SELECT * FROM wp_options WHERE option_name LIKE '%ngg%';

Elimina le righe trovate con una query DELETE usando la stessa condizione. Elimina manualmente le tabelle wp_ngg_pictures, wp_ngg_galleries e wp_ngg_album.

EWWW Image Optimizer

EWWW memorizza i dati di ogni immagine ottimizzata nella tabella wp_ewwwio_images: percorso del file, dimensione originale, dimensione dopo la compressione. Crea anche una cartella wp-content/ewww/ con la cache.

Elimina la cartella via FTP. Poi in phpMyAdmin:

1SELECT * FROM wp_options WHERE option_name LIKE '%ewww%';
Query SQL per pulire opzioni EWWW Image Optimizer

Eliminate ciò che trovi ed elimina la tabella wp_ewwwio_images.

WP All Export

Il plugin crea 4 tabelle nel database. Dopo la cancellazione tramite dashboard, vai in phpMyAdmin, individua le tabelle con il prefisso wp_pmxe_*, selezionale ed esegui "Drop". Controlla inoltre wp_options per la chiave pmxe; il plugin memorizza lì le ultime impostazioni di esportazione.

Maggiori dettagli sul ciclo completo di rimozione dei plugin sono nel video tutorial qui sotto.

⁉️🤔 Domande frequenti

È sicuro eliminare le tabelle dei plugin direttamente tramite phpMyAdmin?

È sicuro a due condizioni: hai fatto un backup completo del database e hai identificato con precisione le tabelle come appartenenti a un plugin già cancellato. Le tabelle dei plugin di terze parti hanno sempre un prefisso riconoscibile: wp_wc_, wp_yoast_ o wp_wf. Non toccare le tabelle di sistema di WordPress (wp_posts, wp_options, wp_users, wp_comments, wp_postmeta e wp_usermeta) con DROP; puoi solo pulirle con DELETE selettivi.

Cosa devo fare se il sito mostra una schermata bianca dopo la cancellazione del plugin?

Ripristina il plugin dal backup: carica la cartella via FTP, importa le sue tabelle. La causa è molto probabilmente nel functions.php del tema, dove potrebbe essere rimasta una chiamata a una funzione del plugin senza un fallback. Trova queste chiamate e racchiudile in function_exists() oppure rimuovile, poi ripeti la cancellazione del plugin.

Come trovo tutte le tracce di un plugin nel database?

Installa il plugin Advanced Database Cleaner. Esegue la scansione di tutte le tabelle alla ricerca di dati orfani e mostra un elenco completo: tabelle, righe in wp_options e wp_postmeta, cron job. È più veloce e sicuro della ricerca manuale tramite phpMyAdmin.

Devo cancellare i plugin forniti in bundle con il tema?

Sì, se non li stai usando. I plugin forniti con i temi (WPBakery Page Builder, Slider Revolution, ACF Pro) spesso hanno licenze limitate e gli aggiornamenti di sicurezza non arrivano per loro. Un WPBakery disattivato e obsoleto con una vulnerabilità nota è una via diretta verso una violazione. Se non lo usi, cancellalo.

Posso ripristinare un plugin dopo la cancellazione completa?

Solo dal backup. Dopo aver pulito le tabelle e wp_options, tutte le impostazioni del plugin sono perse in modo permanente. È proprio per questo che l'algoritmo sopra è costruito dal semplice al radicale: prima la cancellazione standard (reversibile), poi la pulizia dei file e solo alla fine il database. Procedi per fasi sequenziali; non passare direttamente a phpMyAdmin.

I dati del plugin rimangono in WordPress Multisite?

In Multisite, ogni sottosito ha le proprie tabelle: wp_2_options, wp_2_postmeta e così via. Dopo aver cancellato un plugin tramite il super admin, controlla le tabelle di ogni sottosito (wp_*_options e wp_*_postmeta per tutti gli ID blog). Il plugin potrebbe essere stato attivato su singoli siti della rete e aver lasciato record nelle loro tabelle.

Conclusione: quando una pulizia completa è giustificata

Se hai un sito piccolo e cancelli un plugin ogni sei mesi, la cancellazione standard tramite dashboard più una pulizia una tantum di wp_options è sufficiente.

Ma se il tuo sito ha diversi anni, decine di plugin sono transitati e i backup sono cresciuti fino a un gigabyte, una pulizia chirurgica seguendo le istruzioni sopra ridurrà sensibilmente il database e velocizzerà il pannello di amministrazione. In pratica, abbiamo pulito migliaia di record orfani in wp_postmeta e decine di tabelle inutili, e il tempo di risposta del pannello di amministrazione si è ridotto quasi della metà.

Prendi l'abitudine: dopo aver cancellato un plugin, esegui la checklist (FTP → wp_options → cron → tabelle). Dieci minuti oggi ti risparmiano ore domani, quando un database gonfio manda in crash il tuo sito nel picco di traffico.

Quale plugin ha lasciato più spazzatura dopo la cancellazione sul tuo sito? Facci sapere nei commenti.