Chi gestisce un sito WordPress su un VPS arriva presto al momento in cui la dashboard diventa scomoda. Un aggiornamento che si blocca a metà, un sito che non carica più il pannello, tre siti da aggiornare uno dopo l’altro. WP-CLI risolve tutti questi problemi: è lo strumento da riga di comando ufficiale di WordPress e permette di fare da terminale quasi tutto quello che si fa dal pannello, in meno tempo e anche quando il pannello non risponde.
Dopo falle come PHP2Shell conta anche un’altra cosa: con WP-CLI aggiorni core e plugin in pochi secondi, senza aspettare di aprire il browser.
Installare WP-CLI
Il programma è un unico file. Si scarica, si rende eseguibile e si sposta in una cartella raggiunta dal sistema:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp --info
L’ultimo comando mostra la versione di PHP usata e quella di WP-CLI. Se hai un server con OpenLiteSpeed, il comando php di sistema può non esistere o puntare a una versione diversa da quella del sito. In quel caso indica a WP-CLI quale binario usare:
export WP_CLI_PHP=/usr/local/lsws/lsphp83/bin/php
Per renderlo permanente aggiungi la riga al file ~/.bashrc. Perché WP-CLI funzioni, il pacchetto lsphp deve avere anche l’estensione per il database (lsphp83-mysql).
Per aggiornare WP-CLI in futuro:
sudo wp cli update
Come lanciare i comandi nel modo giusto
Ogni comando va eseguito dalla cartella del sito, quella che contiene wp-config.php, oppure indicando il percorso:
cd /var/www/miosito
wp core version
# oppure, da qualsiasi posizione
wp core version --path=/var/www/miosito
Eseguire WP-CLI come root è sconsigliato, e il programma si rifiuta di farlo se non aggiungi --allow-root. Il motivo è pratico: i file creati dal comando ti restano di proprietà di root e PHP non riesce più a scriverci. Meglio lanciarlo con l’utente a cui appartiene il sito:
sudo -u UTENTE_SITO -- wp plugin list --path=/var/www/miosito
Negli esempi che seguono ometto --path e il cambio di utente per leggibilità, ma ricordati di aggiungerli.
Il core di WordPress
wp core version
wp core check-update
wp core update
wp core update-db
wp core verify-checksums
check-update dice se esiste una versione più recente. update la installa, mentre update-db aggiorna il database dopo un aggiornamento importante, ed è l’equivalente della schermata “Aggiorna database” che compare nel pannello. L’ultimo comando confronta i file con quelli ufficiali e segnala quelli modificati o aggiunti: è uno dei controlli più utili per accorgersi in fretta di una compromissione.
Per tornare a una versione precedente o forzare la reinstallazione:
wp core update --version=6.8.3 --force
Plugin
È la parte che userai di più:
wp plugin list
wp plugin list --update=available
wp plugin update --all
wp plugin update nome-plugin
wp plugin install nome-plugin --activate
wp plugin deactivate nome-plugin
wp plugin delete nome-plugin
wp plugin verify-checksums --all
Il filtro --update=available mostra solo i plugin con un aggiornamento in attesa, quindi è il modo più rapido per capire a che punto sei. verify-checksums funziona per i plugin del repository ufficiale e controlla che i file non siano stati alterati.
Quando un plugin manda il sito in errore e non riesci più a entrare nel pannello, il comando salvavita è:
wp plugin deactivate --all
Il sito torna a funzionare senza plugin, e puoi riattivarli uno alla volta per trovare il colpevole. Se il problema nasce dopo un aggiornamento, nella guida su cosa fare quando un aggiornamento di WordPress rompe il sito trovi il metodo di diagnosi completo.
Temi e traduzioni
wp theme list
wp theme update --all
wp theme activate nome-tema
wp theme delete nome-tema
wp language core update
wp language plugin update --all
wp language theme update --all
Un consiglio che vale per i temi come per i plugin: elimina quelli che non usi. Un tema disattivato ma presente sul disco può comunque contenere una falla sfruttabile.
Il database
wp db export /root/backup/db-$(date +%F).sql
wp db import /root/backup/db-2026-10-27.sql
wp db size --tables
wp db check
wp db optimize
wp db prefix
L’esportazione crea un file .sql completo del database e si fa in pochi secondi. È il comando da lanciare prima di qualsiasi operazione rischiosa. size --tables mostra quanto pesa ogni tabella, utile per scoprire quale plugin sta gonfiando il database.
Per lanciare una query diretta:
wp db query "SELECT ID, post_title FROM $(wp db prefix)posts WHERE post_status='draft' LIMIT 10;"
Cercare e sostituire dopo una migrazione
Quando sposti un sito su un nuovo dominio, o passi da HTTP a HTTPS, gli indirizzi sono salvati dentro il database in molti punti, anche in formati serializzati. Una semplice sostituzione di testo li rovinerebbe. search-replace invece li gestisce correttamente:
wp search-replace 'http://vecchio-dominio.it' 'https://nuovo-dominio.it' --skip-columns=guid --dry-run
L’opzione --dry-run mostra quante sostituzioni verrebbero fatte senza toccare nulla. Controlla il risultato e, se è quello che ti aspetti, ripeti il comando senza --dry-run. Escludere la colonna guid è una regola da ricordare: gli identificatori degli articoli non vanno mai modificati.
Utenti
wp user list
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
wp user create mario mario@esempio.it --role=editor --send-email
wp user reset-password ID_UTENTE
wp user update ID_UTENTE --user_pass='una-password-nuova-e-lunga'
wp user delete ID_UTENTE --reassign=ID_ALTRO_UTENTE
Il secondo comando è un controllo di sicurezza da fare spesso: l’elenco degli amministratori con la data di registrazione. Un account che non riconosci, creato nei giorni in cui è uscita una falla, è un segnale da prendere sul serio. Se perdi l’accesso alla dashboard, con wp user update reimposti da terminale la password.
Opzioni e configurazione
wp option get siteurl
wp option get home
wp option update blogname "Nome del sito"
wp config get
wp config set WP_DEBUG true --raw
wp config set WP_MEMORY_LIMIT 256M
wp config shuffle-salts
wp config legge e scrive direttamente il file wp-config.php, e il parametro --raw serve per i valori che non sono testo, come true o i numeri. Per l’elenco delle costanti più utili da impostare puoi consultare la guida ai comandi per wp-config.php. Il comando shuffle-salts rigenera le chiavi di sicurezza e disconnette tutti gli utenti.
Cache, permalink e transient
wp cache flush
wp rewrite flush
wp rewrite structure '/%postname%/'
wp transient delete --expired
wp transient delete --all
rewrite flush risolve molti errori 404 che compaiono dopo una migrazione o l’installazione di un plugin. I transient sono dati temporanei salvati nel database, e quelli scaduti si accumulano nel tempo.
Contenuti e immagini
wp post list --post_status=draft --fields=ID,post_title,post_date
wp post delete $(wp post list --post_type=revision --format=ids) --force
wp media regenerate --yes
Il secondo comando elimina tutte le revisioni degli articoli e alleggerisce il database. Se non ci sono revisioni, il comando restituisce un errore e non è un problema. L’ultimo rigenera tutte le dimensioni delle immagini, utile dopo un cambio di tema che usa formati diversi.
Attività pianificate
wp cron event list
wp cron event run --due-now
wp cron test
Il primo mostra le attività in programma. Se noti eventi con nomi casuali o che non riconosci, controlla meglio: sono un meccanismo che il malware usa per riscaricarsi dopo una pulizia.
Modalità manutenzione
wp maintenance-mode activate
wp maintenance-mode status
wp maintenance-mode deactivate
Attivala prima di operazioni lunghe, così i visitatori vedono un messaggio invece di pagine a metà.
Aggiornare tutto con uno script
Quando le operazioni si ripetono, conviene metterle in un file. Questo è un esempio semplice: salva il database e poi aggiorna ogni componente.
#!/bin/bash
SITO=/var/www/miosito
BACKUP=/root/backup
mkdir -p $BACKUP
cd $SITO || exit 1
wp db export $BACKUP/db-$(date +%F).sql
wp core update
wp plugin update --all
wp theme update --all
wp language core update
wp core update-db
wp cache flush
Salvalo, per esempio, come /root/aggiorna-sito.sh, rendilo eseguibile con chmod +x e lancialo a mano la prima volta, guardando cosa succede. Automatizzarlo con cron è possibile, ma farlo senza snapshot recente significa accettare che un aggiornamento difettoso ti rompa il sito di notte. Se vuoi aggiornare anche PHP in sicurezza, la procedura è nella guida all’aggiornamento di lsphp su OpenLiteSpeed.
Gestire più siti sullo stesso VPS
Se sul server ospiti diversi siti WordPress, un ciclo li aggiorna tutti in sequenza e salta le cartelle che non contengono WordPress:
for d in /var/www/*/; do
if wp core is-installed --path="$d" 2>/dev/null; then
echo "Aggiorno $d"
wp plugin update --all --path="$d"
wp theme update --all --path="$d"
fi
done
È il modo più rapido per non dimenticare il sito vecchio che nessuno apre da mesi e che è proprio quello più facile da attaccare.
Un riepilogo dei comandi da ricordare
Se devi imparare solo una manciata di comandi, scegli questi: wp core verify-checksums per controllare l’integrità, wp plugin list --update=available per vedere cosa è da aggiornare, wp plugin deactivate --all quando il sito è bloccato, wp db export prima di ogni modifica, wp search-replace con --dry-run per le migrazioni e wp user list --role=administrator per tenere d’occhio gli accessi. Con questi sei coperto per quasi tutte le emergenze, e il resto lo trovi con wp help seguito dal nome del comando.
Altro per te
Hosting e ServerSito WordPress infetto: come pulirlo da terminale passo passo e non farsi reinfettare
Trovare una webshell sul proprio sito fa un certo effetto. La tentazione è cancellare il file sospetto e rimettere tutto online il prima possibile,…
Server infettato dopo PHP2Shell? I comandi da terminale per scoprirlo subito
Personalizzare Terminale Linux Chromebook: alias e prompt
Controllare batteria Chromebook Terminale: salute e autonomia
Differenza Crosh Terminale Linux Chromebook: comandi utili
Proteggere file sensibili su macOS dal Terminale
Rinominare file in massa su macOS dal Terminale
Confrontare cartelle macOS Terminale con diff
Altri articoli su Terminale
- Plugin WordPress vulnerabili o abbandonati: come riconoscerli ed eliminarli prima che bucano il sito27 Ott
- Sito WordPress infetto: come pulirlo da terminale passo passo e non farsi reinfettare27 Ott
- Server infettato dopo PHP2Shell? I comandi da terminale per scoprirlo subito27 Ott
