Per gran parte della sua vita, WordPress è stato costruito utilizzando una semplice codebase con un pizzico di PHP orientato agli oggetti come sistema più astratto. A partire dagli ultimi anni, tuttavia, tutto questo sta cambiando in meglio. Dallo unit testing al preprocessing di CSS e agli strumenti da riga di comando, stanno spuntando sempre più risorse dedicate agli gli sviluppatori. In questo articolo analizzeremo uno dei miei strumenti preferiti: WP-CLI.

WP-CLI è stato un progetto open source per oltre un decennio, gestito principalmente da Daniel Daniel Bachhuber a partire dal 2003. L’obiettivo principale di WP-CLI è quello di aiutare ad accelerare i flussi di lavoro degli sviluppatori di WordPress.

Nel corso degli anni il progetto è cresciuto sempre di più! Ora sta diventando addirittura un requisito per altri progetti open source come Trellis and Bedrock. A partire da gennaio 2017, WP-CLI si è ufficialmente trasferito su WordPress.org e ora viene co-mantenuto da Alain Schlesser. (Non potete connettervi via SSH? Correggette l’errore SSH “Connection Refused”).

WP-CLI v2 è stato rilasciato l’8 agosto 2018, quindi esploreremo anche alcune delle modifiche e delle nuove funzionalità. Se siete clienti Kinsta, sappiate che WP-CLI v2.0.1 viene installato automaticamente su tutti i nostri server, vi basta accedere via SSH al vostro server per iniziare a lavorare. L’accesso SSH è compreso in tutti i nostri piani di hosting.

Come Procurarsi WP-CLI

Il requisito minimo PHP di WP-CLI v2.0.0 è stato elevato a PHP 5.4. Sebbene questa sia un buon miglioramento, noi consigliamo di eseguire almeno una delle versioni supportate di PHP, cioè PHP 5.6 o superiore. PHP 7.2 è di default su tutte le installazioni di Kinsta, sia per ragioni di sicurezza che di prestazioni. È disponibile anche PHP 7.3 e 7.4.

Per iniziare è necessario installare WP-CLI – è una procedura molto semplice. I passaggi per Linux e OSX sono indicati di seguito. Inviate questi tre comandi uno dopo l’altro:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Se qualcosa va storto o siete su Windows, fate riferimento alle istruzioni di base o ai metodi di installazione alternativi.

Una volta fatto dovreste essere in grado di eseguire il comando wp --info e avere una risposta significativa.

Il procedimento è lo stesso se si desidera installare WP-CLI sul proprio server. Kinsta installa WP-CLI di default anche se non avete ancora la possibilità di accedere al server tramite SSH, anche se questa funzionalità arriverà presto!

L’idea di WP-CLI è che vi dà accesso a task comuni (e non così comuni) tramite riga di comando. Ricordate che per i clienti di Kinsta WP-CLI è già installato. Non siete sicuri di quale sia la versione in esecuzione? Potete sempre eseguire il comando wp cli version e verificare.

Le Basi di WP-CLI

Avere accesso a WordPress dalla linea di comando è già potente di per sé, ma può offrirvi un controllo ancora maggiore e miglioramenti nella velocità quando utilizzate gli script bash.

Gli script bash consentono di eseguire una sequenza di comandi con un singolo comando. Potreste digitare bash install-and-setup.sh e ottenere il seguente risultato:

  • Scarica WordPress
  • Crea e popola wp-config.php
  • Crea il database
  • Installa WordPress
  • Installa e attiva tutti i plugin necessari
  • Installa e attiva un tema
  • Scarica e aggiunge contenuti di prova

Questi sarebbero i passi che farei per creare un nuovo ambiente di test per qualsiasi progetto. Normalmente mi ci vorrebbero almeno 5-10 minuti, soprattutto se sono coinvolti diversi plugin. Inviare un singolo comando è ovviamente molto più veloce.

I Comandi in Generale

Se siete abituati a lavorare con il terminale, non c’è niente di speciale da dire per voi su WP-CLI. I comandi iniziano sempre con wp seguito da un comando e da un sottocomando, seguito da parametri obbligatori e facoltativi. Qualcosa del genere:

wp command subcommand requiredparam --optionalparam --optionalparam2=value

Installiamo, ad esempio, un tema per vedere come funziona con un comando reale:

wp theme install twentyseventeen --activate

Questo installerà e attiverà il tema Twenty Seventeen nella vostra installazione di WordPress.

Si noti che WP-CLI funzionerà con l’installazione di WordPress che avete al momento nel terminale. Se cambiate directory per passare a un’altra installazione di WordPress, WP-CLI funzionerà con quest’ultima.

Esempi utili

Questo per quanto riguarda WP-CLI in breve! Anche se ci sono diverse azioni avanzate che potete compiere, alle quali arriveremo tra un attimo, ne sapete già abbastanza per iniziare e fare tutto ciò che vi può essere necessario. Consiglio di dare un’occhiata all’elenco dei comandi. Provatene alcuni. Qui daremo un’occhiata ad alcune cose utili. Allora cominciamo ad utilizzare WP-CLI su SSH e usando gli script di bash.

Installare WordPress

Personalmente, uso molto WP-CLI per configurare gli ambienti di test, per i quali il primo passo è l’installazione iniziale. Ecco un elenco dei comandi che eseguo:

wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

Guardate che meraviglia! La versione più recente di WordPress viene scaricata utilizzando il primo comando. Il secondo comando imposta il file di configurazione con l’accesso al database e qualche altra istruzione PHP alla fine. Le costanti aggiuntive ci assicurano di avere pronte le nostre opzioni di debug per il test. Qui abbiamo una guida dettagliata se volete saperne di più sul debug di WordPress.

Il terzo comando crea il database (WP-CLI utilizza le informazioni di accesso al database dal file di configurazione) e, infine, passiamo all’installazione di WordPress usando un paio di parametri.

Reistallare il Core di WordPress

Potete anche reinstallare il Core di WordPress con WP-CLI. Il comando che segue scarica il core di WordPress senza i temi e i plugin predefiniti.

wp core download --skip-content --force

Cambiare l’URL di WordPress

Ci potrebbero essere molte ragioni per cui potreste aver bisogno di cambiare l’URL di WordPress.
Potrebbe essere che state cambiando domini, o che state passando a un sottodominio, aggiornando da www a non-www, spostando file da qualche parte, o persino migrando da HTTP a HTTPS. In tutti questi casi, potete semplicemente usare il comando wp option update. Ecco un esempio:

wp option update home 'http://example.com'
wp option update siteurl 'http://example.com'

Elenco dei Plugin Correnti con Dettagli

Per ottenere un elenco dei plugin installati in un sito, vi basta utilizzare il comando che segue. In questo esempio si può vedere che abbiamo installato i plugin Schema e Yoast SEO. Il comando restituirà anche lo stato (attivo/disattivato), se è disponibile un aggiornamento e la versione corrente del plugin.

wp plugin list
Il comando wp plugin list
Il comando wp plugin list

Installazione di Plugin Multipli

Per installare più plugin, potete semplicemente sovrapporre i parametri. Ecco un esempio di comando che scarica e attiva 3 plugin:

wp plugin install advanced-custom-fields jetpack ninja-forms --activate

Si noti che i nomi dei plugin provengono dal nome che hanno nella repository. Il modo più semplice per individuarlo è visitare la loro pagina e guardare la URL o utilizzare wp plugin search searchterm, che vi darà una lista nel terminale.

Nome plugin nella repository di WordPress
Nome plugin nella repository di WordPress

È anche possibile installare versioni precedenti dei plugin, se necessario, con l’attributo --version

wp plugin install wordpress-seo --version=4.8 --activate

Cosa ancora più interessante, è possibile installare plugin da file remoti, non solo dalla repository. Ciò è utile se si sta sviluppando un plugin o se si utilizza un plugin premium. Il seguente comando installa due plugin dalla repository ed uno da un server Amazon S3.

wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip --activate

Disattivare Plugin Multipli

Per disattivare un singolo plugin, potete eseguire il seguente comando.

wp plugin deactivate wordpress-seo

Per disattivare tutti i plugin, invece, eseguite quest’altro comando.

wp plugin deactivate --all
Disattivare tutti i plugin in WP-CLI
Disattivare tutti i plugin in WP-CLI

Questo comando può essere utile se state risolvendo problemi di compatibilità e avete solo bisogno di disattivare tutti i plugin in un colpo solo. È quindi possibile tornare indietro e abilitarli uno per uno, procedendo con i test.

Aggiornare i Plugin

Potete anche aggiornare manualmente i plugin. Ecco come:

wp plugin update wordpress-seo
Aggiornare manualmente i plugin di WordPress in WP-CLI
Aggiornare manualmente i plugin di WordPress in WP-CLI

Ricerca e Sostituzione nel Database

Uno dei motivi principali per cui è difficile migrare un sito semplicemente copiando e incollando un database è che il database contiene array serializzati. Se avete bisogno di sostituire tutte le istanze di http://testsite.com con http://livewebsite.com, i vostri array serializzati non avranno senso perché il numero di stringhe non corrisponderà.

Il comando search-replace prima deserializza gli array, poi esegue la ricerca e sostituzione, quindi serializza nuovamente gli array. Potete farlo con un semplice comando:

wp search-replace oldstring newstring

Ulteriori parametri vi permettono di fare molto di più, inclusa l’anteprima di ciò che verrà sostituito usando --dry-run.

Importazione ed Esportazione

Esistono due modi per esportare i contenuti con WP-CLI. Potete creare un file XML, proprio come fa lo strumento di esportazione di WordPress, oppure esportare/importare il database grezzo. Trovo che la seconda soluzione sia molto più utile nella mia routine quotidiana, ed è utile quando si sincronizzano i siti.

wp db export è tutto ciò che dovete fare per creare un file sql e wp db import file.sql è tutto ciò che serve per importarlo. Va che è una meraviglia, fate solo attenzione a non sovrascrivere qualcosa di cui avete bisogno. L’importazione in pratica eliminerà il database esistente e utilizzerà al suo posto il file SQL importato.

Aggiungere, aggiornare, eliminare utenti

È possibile aggiungere, aggiornare e cancellare gli utenti con WP-CLI.

# List user IDs
$ wp user list --field=ID
1

# Create a new user.
$ wp user create john [email protected] --role=author
Success: Created user 3.
Password: HOh897%*(&^R8

# Update an existing user.
$ wp user update 123 --display_name=Beth --user_pass=bethpass
Success: Updated user 123.

# Delete user 123 and reassign posts to user 443
$ wp user delete 123 --reassign=443
Success: Removed user 123 from http://example.com

Gestione dei Ruoli e delle Capacità

WP-CLI può gestire i ruoli abbastanza facilmente grazie al comando wp role. Questo comando è davvero interessante se volete testare come funziona il vostro plugin con i ruoli personali, ma in realtà non create i ruoli all’interno del vostro plugin.

wp role create organizer Organizer
wp cap list 'editor' | xargs wp cap add 'organizer'
wp cap add 'organizer' 'manage-events'

I comandi qui sopra creeranno un nuovo ruolo (Organizer), vi aggiungeranno tutte le funzionalità del ruolo Editor e quindi aggiungeranno una nuova funzionalità: manage-events. Con i comandi giusti è possibile utilizzare WP-CLI per cambiare la password di WordPress.

Generare Dati di Prova

Mi piace ogni sorta di funzione tipo faker, ossia quelle che aggiungono contenuti fittizi al vostro sito da utilizzare per i vostri test. WP-CLI dispone nativamente di un paio di queste funzioni. Ecco alcune funzioni che generano utenti, termini e post.

wp user generate --count=5 --role=editor
wp user generate --count=10 --role=author
wp term generate --count=12
wp post generate --count=50

Gestire Eventi Cron

Potete anche gestire eventi WP-Cron e/o Cron Job WordPress in WP-CLI. Ad esempio, il comando che segue vi fornirà l’elenco corrente degli eventi cron.

wp cron event list
Elenco eventi wp cron
Elenco eventi wp cron

Eliminare i Dati Transient

Potete perfino eliminare e ripulire uno o tutti i dati transient utilizzando il seguente comando.

wp transient delete --all

Se avete un’installazione multisite, vi servirà un comando un po’ più complesso. Di default, il comando controlla solo la tabella wp_options. Non controlla wp_1_options, wp_2_options, ecc.

wp transient delete --all --network && wp site list --field=url | xargs -n1 -I % wp --url=% transient delete --all

Ripulire la Tabella wp_options

La tabella wp_options può essere una causa comune di tempi lenti di esecuzione delle query nel vostro sito per la presenza di dati caricati automaticamente, lasciati indietro da plugin e temi di terze parti. Date un’occhiata a questo fantastico articolo di WP Bullet su come utilizzare WP-CLI per ripulire la vostra tabella wp_options.

Eliminare le Revisioni di WordPress

Su siti di grandi dimensioni, le revisioni di WordPress possono aggiungere rapidamente migliaia di righe non necessarie nel database. È possibile eliminare le revisioni dei post con WP-CLI. Ecco un esempio del comando:

$ wp post delete $(wp post list --post_type='revision' --format=ids)
Eliminare le revisioni di WordPress con WP-CLI
Eliminare le revisioni di WordPress con WP-CLI

Controllo del Maintenance Mode

A partire dalla versione v2.2.2.0 di WP-CLI, è ora possibile controllare la modalità di manutenzione sul vostro sito WordPress. Esempio:

wp maintenance-mode activate
wp maintenance-mode deactivate
wp maintenance-mode status

Indicizzare i Dati con Elasticsearch

Elasticsearch è un motore di ricerca full-text open-source. Viene utilizzato per indicizzare i dati e cercare tali dati in modo incredibilmente rapido. Offriamo questo tool ai clienti Kinsta come add-on. È possibile utilizzare i comandi WP-CLI di ElasticPress per eseguire l’indicizzazione su SSH. Esempio:

wp elasticpress index [--setup] [--network-wide] [--posts-per-page] [--nobulk] [--offset] [--show-bulk-errors] [--post-type]

Lavorare con Siti Multilingua

WP-CLI v2.0.0 include una nuova famiglia di comandi wp i18n per quelli di voi che lavorano con siti multilingua. Ad esempio, potete creare un file POT per un plugin o un tema WordPress.

wp i18n make-pot <source> [<destination>] [--slug=<slug>] [--domain=<domain>] [--ignore-domain] [--merge[=<file>]] [--exclude=<paths>] [--skip-js]

Si veda anche la documentazione del comando i18n.

Utilizzare WP-CLI con WooCommerce

Lavorate con i siti di e-commerce? Allora vi consigliamo di dare un’occhiata alla fantastica guida allo sviluppo WooCommerce con WP-CLI di Robot Ninja, dove troverete un elenco di comandi rapidi e semplici da utilizzare. Con WP-CLI è possibile generare un elenco di clienti, ordini e persino la creazione di prodotti in massa.

Utilizzare WP-CLI da Remoto

Una delle cose migliori che potete fare con WP-CLI è gestire le vostre installazioni WordPress remote. È un sogno che si avvera per chi gestisce siti web.

Per eseguire senza problemi i comandi WP-CLI su un server remoto tramite SSH, in precedenza era necessario il comando add-on wp-cli-ssh. Ma dalla v0.24.0, questo fa ora parte di WP-CLI! 👏

Importante: è necessario che WP-CLI sia installato sul computer sul quale si sta eseguendo il comando sia sul proprio server.

Configurazione dei Server Remoti

Potete configurare i vostri server globalmente o localmente. Per configurarli globalmente, usate il file config.yml. Potete anche utilizzare i file wp-cli.yml o wp-cli.local.yml nella vostra directory di lavoro corrente.

La configurazione dei server funziona come segue. Incollatela in uno dei file menzionati:

ssh:

  staging:
    cmd: ssh %pseudotty% [email protected] %cmd%
    url: http://myseite.com
    path: /www/path/to/site/root

Una volta fatto tutto questo, potete digitare il seguente comando per aggiornare WordPress sul vostro sito remoto:

wp ssh core update --host=staging

Se possedete o gestite molti siti, penso che vi sembrerà fantastico! Lo script chiederà una password ma, se utilizzate le chiavi RSA per accedere, potrete anche evitarla. Date un’occhiata a questo articolo per la configurazione.

Utilizzare gli Script Bash

Gli script bash vi fanno risparmiare ancora più tempo automatizzando le attività. Ricordate come abbiamo dovuto digitare molti comandi per installare WordPress? Potete farlo con un singolo script bash. All’interno di una directory, create un file install.sh. Incollate lo stesso codice visto in precedenza e salvatelo.

wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

Tutto quello che dovete fare ora è digitare bash install.sh e per voi il gioco è fatto, senza alcun intervento dell’utente. Se gestite molti siti, potete configurare tutti i vostri ambienti e creare uno script bash come questo:

wp ssh core update --host=clientA
wp ssh core update --host=clientB
wp ssh core update --host=clientC
wp ssh core update --host=clientD

Quando viene fuori una nuova versione di WordPress, questo potrebbe farvi risparmiare un sacco di tempo! Dal momento che potete fare tutto ciò che volete con WP-CLI, potete anche aggiornare regolarmente temi e plugin su un certo numero di siti client contemporaneamente.

Conclusioni

WP-CLI è davvero un sogno che si avvera sia per lo sviluppatore che per il gestore di siti web. Come sviluppatori possiamo creare siti di testing in un batter d’occhio, aggiungere contenuti di prova e fare ogni sorta di magia di importazione/esportazione. I gestori di siti possono eseguire gli aggiornamenti e altre attività per più siti con singoli comandi. Ricordatevi di leggere le note di rilascio di WP-CLI v2!

Se non avete già provato WP-CLI, dovete farlo al più presto. Ci sono anche una serie di comandi della community, come WP-CLI-SSH, che aggiungono funzionalità ancora più potenti! Se doveste incorrere in qualche problema, date un’occhiata alla documentazione sui problemi comuni di WP-CLI.

Non dimenticate che la nuova architettura basata su Google Cloud di Kinsta supporta nativamente WP-CLI. Se desiderate provare la più moderna architettura di hosting WordPress e avere accesso a strumenti eccezionali come WP-CLI, provate il nostro hosting WordPress gestito.

Daniel Pataki

Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space.

When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.