Spesso si ha l’esigenza di cambiare url di WordPress, a volte a causa di un cambio del dominio o semplicemente se si è sviluppato il sito web su un server di sviluppo (in localhost ad esempio) ed è venuto il momento di migrare sul dominio in produzione.
Per essere più precisi quello che andremo a fare è eseguire un replace di tutte le occorrenze dell’URL all’interno del database nel caso che il dominio cambi (es. da http://localhost a http://www.esempio.com).
Search & Replace Web GUI
Search & Replace è una libreria disponibile qui, estremaente semplice da utilizzare tramite interfaccia web e installandola nella stessa root di WordPress prende automaticamente le configurazioni del database da wp-config.php. Ad esempio supponiamo di aver caricato tramite FTP la cartella dentro miosito/searchreplace/ basterà semplicemente aprire la suddetta url e inserire i parametri di sostituzione (l’interfaccia è molto intuitiva).
WP CLI Search & Replace Command line
Per chi, come me, preferisce il terminale è preferibile, dove possibile, utilizzare la libreria command line WP CLI, che offre una larga scelta di comandi utili per chi sviluppa tra cui appunto il comando wp search-replace
Vediamo alcuni esempi:
# Search and replace but skip one column $ wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid # Run search/replace operation but dont save in database $ wp search-replace 'foo' 'bar' wp_posts wp_postmeta wp_terms --dry-run # Run case-insensitive regex search/replace operation (slow) $ wp search-replace '\[foo id="([0-9]+)"' '[bar id="\1"' --regex --regex-flags='i' # Turn your production multisite database into a local dev database $ wp search-replace --url=example.com example.com example.dev 'wp_*options' wp_blogs # Search/replace to a SQL file without transforming the database $ wp search-replace foo bar --export=database.sql # Bash script: Search/replace production to development url (multisite compatible) #!/bin/bash if $(wp --url=http://example.com core is-installed --network); then wp search-replace --url=http://example.com 'http://example.com' 'http://example.dev' --recurse-objects --network --skip-columns=guid --skip-tables=wp_users else wp search-replace 'http://example.com' 'http://example.dev' --recurse-objects --skip-columns=guid --skip-tables=wp_users fi