Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 73 di 102
  • livello intermedio
Indice lezioni

WP CLI: ricerca e sostituzione nel database

Impariamo ad utilizzare WP CLI e il comando wp search-replace per effettuare operazioni di ricerca e sostituzione a carico di un database di WordPress.
Impariamo ad utilizzare WP CLI e il comando wp search-replace per effettuare operazioni di ricerca e sostituzione a carico di un database di WordPress.
Link copiato negli appunti

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.

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 e –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 quando si esporta l'SQL. Potrebbe essere necessario cambiare questo valore a seconda della configurazione del database. Il valore predefinito è 50.
[--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. Impostare –no-recurse-objects per disattivare.
[--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’ per "case insensitive").
[--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; opzioni: – table, – count, ---).
[--report] Produce un report. Di default è true.
[--report-changed-only] Produce un report con i soli campi modificati. Di defaults è false a meno che non si esegua il logging.
[--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.

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.

Figura 1. Comando wp search-replace.
wp search-replace

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.

Figura 2. La sostituzione ha avuto effetto.
wp search-replace

È 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 nella directory di WordPress, ma non saranno apportate modifiche al vecchio database.

Ti consigliamo anche