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.

Se vuoi aggiornamenti su CMS inserisci la tua email nel box qui sotto:

Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.

Ti consigliamo anche