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 --info

    Se 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-run dove esiste.
  • Su più siti, ripeti i comandi spostandoti nella cartella giusta o con --path: controlla sempre su quale sito stai lavorando con wp option get home.
  • Non lasciare file .sql o archivi dentro public_html.

Se un comando ti restituisce un errore che non capisci, copia comando e messaggio in un ticket: lo guardiamo insieme.

Altri articoli su SSH, terminale e sviluppo

Parliamone

Un hosting che ti spiega le cose, e poi le fa

Questi articoli nascono dalle domande dei nostri clienti. Se vuoi un hosting dove dietro ogni risposta c’è un tecnico vero, parliamone.

  • 4,9 su 5 su Trustpilot264 recensioni, il 96% a cinque stelle
  • Risponde un tecnicoIn italiano, da chi gestisce i server
  • Il trasloco lo facciamo noiSito, database e posta, controllati prima di spostare i DNS