WP-CLI è lo strumento ufficiale per gestire WordPress dalla riga di comando. Tutto quello che fai dalla bacheca (aggiornare plugin, creare utenti, cambiare impostazioni) puoi farlo con un comando, spesso in pochi secondi e anche quando la bacheca non si apre. In questa guida vediamo i comandi più utili, con qualche esempio di vita reale.
Cosa ti serve
- Accesso SSH al tuo hosting. Da noi è disponibile sulla porta 7530 (
ssh -p 7530 tuoutente@server), meglio se con una chiave SSH aggiunta dal pannello. Vedi Usare la chiave SSH sul tuo hosting. - Un minimo di confidenza con il terminale: se parti da zero, dai un’occhiata a Il terminale per chi inizia.
- WP-CLI disponibile: una volta collegato, verifica con:
wp --infoSe il comando non viene trovato, faccelo sapere con un ticket e ti indichiamo come procedere.
Il primo comando
WP-CLI lavora sull’installazione WordPress della cartella in cui ti trovi. Quindi, per prima cosa, spostati nella cartella del sito:
cd ~/domains/tuodominio.it/public_html
wp core version
Se risponde con un numero di versione, sei pronto. In alternativa puoi indicare il percorso con --path e lanciare i comandi da dove vuoi:
wp --path=~/domains/tuodominio.it/public_html core version
Ogni comando ha il suo aiuto: wp help, wp help plugin, wp help plugin update.
Prima regola: un backup del database
Prima di qualsiasi operazione massiva, esporta il database. Ci vuole un attimo:
wp db export ~/backup-prima-di-aggiornare.sql
Nota che il file l’abbiamo salvato nella home, fuori da public_html: lasciare un dump del database dentro il sito significa renderlo scaricabile. I backup automatici ci sono comunque (JetBackup, almeno due copie al giorno conservate 30 giorni), ma tieni presente che i file .sql sono fra quelli esclusi dai backup: una volta finito, quel dump scaricalo sul tuo computer se vuoi conservarlo, e poi cancellalo dal server.
Aggiornamenti
wp core check-update # c'è una nuova versione di WordPress?
wp core update # aggiorna WordPress
wp core update-db # aggiorna il database dopo un aggiornamento maggiore
wp plugin list # elenco plugin con stato e aggiornamenti disponibili
wp plugin update --all # aggiorna tutti i plugin
wp plugin update woocommerce # aggiorna un plugin solo
wp theme list
wp theme update --all
wp language core update # aggiorna le traduzioni
wp language plugin update --all
Un consiglio: piuttosto che --all alla cieca, su siti importanti aggiorna i plugin principali uno alla volta e controlla il sito tra un aggiornamento e l’altro. Con --dry-run vedi cosa verrebbe aggiornato senza farlo.
Plugin e temi
wp plugin install nome-plugin --activate # installa e attiva dal repository ufficiale
wp plugin deactivate nome-plugin
wp plugin delete nome-plugin
wp theme activate nome-tema
Il caso classico: il sito è bianco dopo un aggiornamento
Un plugin rompe il sito e non riesci più a entrare in bacheca? Da terminale lo disattivi in un secondo:
wp plugin list --status=active
wp plugin deactivate plugin-sospetto
Se non sai quale sia il colpevole, puoi disattivarli tutti e poi riattivarli uno alla volta:
wp plugin list --status=active --field=name > ~/plugin-attivi.txt
wp plugin deactivate --all
# ...verifica il sito, poi riattiva uno alla volta:
wp plugin activate nome-plugin
Il file plugin-attivi.txt ti ricorda quali erano attivi prima.
Se il problema è un errore fatale che impedisce anche a WP-CLI di caricare WordPress, puoi saltare plugin e tema:
wp --skip-plugins --skip-themes plugin deactivate plugin-sospetto
Utenti
wp user list
wp user create mario mario@example.com --role=administrator
wp user update mario --user_pass='UnaPasswordLungaECasuale'
wp user delete vecchioutente --reassign=1
Ottimo quando hai perso l’accesso all’amministratore o devi rimuovere in fretta un utente che non riconosci. Attenzione: una password scritta nel comando resta nella cronologia del terminale. Meglio non specificarla e lasciare che sia WordPress a mandare il link di reimpostazione, oppure cancellare la cronologia dopo.
Cambiare dominio o passare a https
Quando sposti un sito su un nuovo dominio, gli indirizzi vecchi restano scritti ovunque nel database. Il comando search-replace li sostituisce in modo sicuro, anche dentro i dati serializzati (cosa che un «cerca e sostituisci» fatto a mano su un file SQL rompe):
# prima una prova, senza modificare nulla
wp search-replace 'https://vecchiodominio.it' 'https://nuovodominio.it' --dry-run
# poi per davvero
wp search-replace 'https://vecchiodominio.it' 'https://nuovodominio.it'
Il --dry-run ti dice quante sostituzioni farebbe in ogni tabella: se i numeri ti sembrano sensati, procedi. Il certificato SSL Let’s Encrypt viene emesso e rinnovato in automatico su ogni dominio, quindi il passaggio a https riguarda solo gli indirizzi scritti nel database.
Opzioni e cache
wp option get siteurl
wp option get home
wp option update blogname 'Il mio nuovo nome'
wp cache flush # svuota la cache degli oggetti
wp transient delete --all # elimina i dati temporanei
Se usi Redis come cache degli oggetti (si attiva dal pannello, vedi Redis), wp cache flush svuota anche quella. Per la cache delle pagine, invece, usa le funzioni di svuotamento del plugin di cache che hai installato, come iWebLab Cache.
Database
wp db size --tables # dimensione delle tabelle
wp db optimize # ottimizza le tabelle
wp db export dump.sql # esporta
wp db import dump.sql # importa (sovrascrive!)
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_status='trash';"
L’importazione via WP-CLI è la soluzione giusta per i database troppo grandi da caricare dal browser. Ricorda che wp db import sostituisce il contenuto attuale: fai prima un export. E controlla il prefisso delle tabelle del tuo sito, che potrebbe non essere wp_: lo trovi con wp config get table_prefix.
Contenuti
wp post list --post_type=page --fields=ID,post_title,post_status
wp post delete $(wp post list --post_status=trash --format=ids) --force # svuota il cestino
wp comment delete $(wp comment list --status=spam --format=ids) # elimina lo spam
Se un comando con $(...) restituisce un elenco vuoto, WP-CLI ti segnalerà che mancano argomenti: niente di grave, significa solo che non c’era nulla da cancellare.
Verificare l’integrità dei file
wp core verify-checksums
wp plugin verify-checksums --all
Questi comandi confrontano i file di WordPress e dei plugin del repository ufficiale con gli originali, e segnalano quelli modificati o aggiunti. Sono un controllo rapido utile dopo un sospetto di compromissione, in aggiunta all’antimalware cPGuard che lavora già in automatico su file e database.
Buone abitudini
- Prima di operazioni di massa:
wp db export, sempre. - Usa
--dry-rundove esiste. - Su più siti, ripeti i comandi spostandoti nella cartella giusta o con
--path: controlla sempre su quale sito stai lavorando conwp option get home. - Non lasciare file
.sqlo archivi dentropublic_html.
Se un comando ti restituisce un errore che non capisci, copia comando e messaggio in un ticket: lo guardiamo insieme.