WP CLI dispone di un comando specifico per effettuare operazioni di ricerca e sostituzione all'interno del database di WordPress. Questo comando è particolarmente utile in quanto permette di effettuare con semplicità delle operazioni che altrimenti richiederebbero una conoscenza più approfondita di MySQL. Il comando è wp search-replace
, esso cerca tra tutte le righe in una selezione di tabelle e sostituisce le occorrenze della prima stringa con la seconda.
N.B.: Il comando gestisce in modo intelligente i dati PHP serializzati, e non cambia i valori delle chiavi primarie.
wp search-replace
dispone di numerose opzioni che vale la pena elencare.
Esempio di ricerca e sostituzione
Si supponga di voler cambiare tutti gli URL di un certo tipo presenti nei contenuti del sito, ad esempio per un cambio di dominio, che costringe a passare da un URL tipo http://esempio.com
a https://miosito.it
.
Ecco il comando WP CLI:
wp search-replace 'http://esempio.com' 'https://miosito.it' nowp_posts --precise --recurse-objects --dry-run
Il risultato è mostrato nell'immagine che segue.

La query non è stata eseguita realmente dato che è stata impostata l'opzione --dry-run
. Per eseguire effettivamente il comando, basterà eliminare l'opzione:
wp search-replace 'http://esempio.com' 'https://miosito.it' nowp_posts --precise --recurse-objects
Si dovrà poi ricaricare la pagina per verificare il risultato dell'operazione.

È bene ricordare che le operazioni di scrittura sul database sono irreversibili. Prima di procedere è quindi indispensabile effettuare un back-up con il seguente comando:
wp db export backup-database.sql --all-tables
Inoltre, per essere sicuri della correttezza del comando che si andrà ad eseguire, è sempre bene utilizzare prima l'opzione --dry-run
.
Altra soluzione è effettuare la scrittura su un nuovo database che viene esportato senza modificare il precedente:
wp search-replace 'https://miosito.it' 'http://esempio.com' --export=database.sql --precise --recurse-objects
Il nuovo database sarà salvato come database.sql
Ti consigliamo anche
Opzione | Descrizione |
---|---|
<old>
|
Stringa da cercare nel database. |
<new>
|
Sostituisce le istanze della prima stringa con la seconda. |
[<table>...]
|
Elenco di tabelle alle quali si desidera restringere la ricerca (supportate le wildcard, es. 'wp_post*'
|
[--dry-run]
|
Esegue l'operazione e mostra il risultato senza salvare dati nel database. |
[--network]
|
Esegue ricerca e sostituzione nelle tabelle registrate di un'installazione multisite. |
[--all-tables-with-prefix]
|
Opera su tutte le tabelle il cui nome corrisponde al prefisso specificato, anche se non registrate. |
[--all-tables]
|
Abilita la sostituzione su tutte le tabelle, indipendentemente dalla loro registrazione. Sovrascrive –network
–all-tables-with-prefix
|
[--export[=<file>]]
|
Scrive i dati modificati in un file SQL a parte invece di salvare le modifiche nel database. |
[--export_insert_size=<rows>]
|
Definisce il numero di righe ammesse in una singola istruzione INSERT
|
[--skip-tables=<tables>]
|
Non esegue operazioni su specifiche tabelle. I nomi vanno separati da virgole. |
[--skip-columns=<columns>]
|
Non esegue le operazioni su specifiche colonne. I nomi vanno separati da virgole. |
[--include-columns=<columns>]
|
Esegue le operazioni su specifiche colonne. I nomi vanno separati da virgole. |
[--precise]
|
Forza l'utilizzo di PHP al posto di SQL. I risultati sono più precisi, ma le operazioni più lente. |
[--recurse-objects]
|
Abilita la ricorsione negli oggetti per sostituire le stringhe. Il valore di default è true
–no-recurse-objects
|
[--verbose]
|
Stampa le righe modificate sulla console dopo la modifica. |
[--regex]
|
Esegue la ricerca utilizzando un'espressione regolare senza limitatori. Questa operazione puù durare 15 o 20 volte di più di un'operazione normale. |
[--regex-flags=<regex-flags>]
|
Passa i flag regex per eseguire l'operazione (ad esempio ‘i’
|
[--regex-delimiter=<regex-delimiter>]
|
Delimitatore utilizzato nella regex. Il valore di default è il risultato di chr(1)
|
[--format=<format>]
|
Il formato dell'output (default: table
– table
– count
---
|
[--report]
|
Produce un report. Di default è true
|
[--report-changed-only]
|
Produce un report con i soli campi modificati. Di defaults è false
|
[--log[=<file>]]
|
Registra gli elementi modificati ma causa un notevole rallentamento delle operazioni. |
[--before_context=<num>]
|
Per le operazioni di logging, il numero di caratteri da mostrare prima della vecchia corrispondenza e della nuova sostituzione. Di default è 40. Viene ignorato se non si effettua il logging. |
[--after_context=<num>]
|
Per le operazioni di logging, il numero di caratteri da mostrare dopo la vecchia corrispondenza e la nuova sostituzione. Di default è 40. Viene ignorato se non si effettua il logging. |