Quale Query SQL utilizzare per una semplice ricerca e sostituzione
Ogni volta che creo un nuovo sito web, prima creo un sito di staging su un sottodominio come "stage.domain-name.com".
Dopo che tutto funziona correttamente, esporto il database, lo apro in notepad++ e faccio una ricerca/sostituzione di "subdomain.domain-name.com" sostituendolo con "domain-name.com"... infine lo importo in un nuovo database per il sito live.
La mia domanda è... quale query SQL dovrei eseguire se volessi fare questa semplice ricerca/sostituzione sull'intero database utilizzando phpMyAdmin?
-CH

Migliori opzioni per lavorare con opzioni, post, contenuti dei post e meta dei post:
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
Vedi anche Ricerca dati con phpMyAdmin e MySQL | Packt Publishing. E Search RegEx è un ottimo plugin per WordPress che permette di cercare e sostituire con Grep in tutti i post e le pagine.
Aggiornamento 16/06/2015: Usare lo strumento linkato nella prossima frase è molto meglio, poiché una semplice ricerca/sostituzione come sopra in un dump del database romperà i dati serializzati. Vedi interconnectit.com WordPress Serialized PHP Search Replace Tool. In questo modo, non romperai i dati serializzati e non avrai bisogno di eseguire RegEx sul contenuto dei post, poiché lo script di interconnect cambia gli URL ovunque. Io uso questo strumento spesso per migrare siti su domini diversi, o semplicemente per fare un cambiamento globale da http a https per forzare SSL senza plugin e cambiare tutti gli URL nel contenuto per prevenire errori di elementi non sicuri.
Modifica 02/09/21 WP CLI è anche un ottimo strumento, e gestisce correttamente i dati serializzati. Vedi https://developer.wordpress.org/cli/commands/search-replace/

Non cambiare mai il guid - anche se passi a un nuovo dominio. Viene utilizzato per identificare in modo univoco il post poiché l'ID può cambiare se i post vengono esportati/importati in un nuovo database. Tra le altre cose, i lettori RSS utilizzano il GUID per determinare se un articolo specifico è stato letto o meno. Modificare il guid farà sostanzialmente ripubblicare tutti i tuoi articoli.

Se stai cambiando dominio, semplicemente non hai scelta e devi cambiare i GUID. La perdita di lettori RSS è un prezzo minimo da pagare.

Nonostante i GUID contengano un URL, non vengono utilizzati per creare link (ad esempio nei menu) quando si fa riferimento ai post. E quindi non cambiarli è perfettamente accettabile

La tabella dove viene salvato il tuo URL è wp_options. Dovresti eseguire un aggiornamento sulle colonne che utilizzano l'URL del tuo sito:
UPDATE TABLE wp_options SET option_value = "nuovo dominio" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "nuovo dominio" WHERE option_name = "home"
Potrei aver dimenticato qualche valore, ma ogni volta che ripeti questo processo di trova/sostituisci, puoi notare i valori e le tabelle che dovrebbero essere aggiornate e aggiungerle a questo script.
Il WordPress Codex ha una guida utile su come cambiare l'URL di un sito, forse per te è ancora più comoda: Modificare l'URL del sito

non esiste un modo per fare un trova/sostituisci su tutto il database? In altre parole... ho notato ad esempio che devo sostituire gli URL in un sacco di posizioni diverse, inclusa la libreria media... Se ci fosse un trova/sostituisci per l'intero database, in pratica per ogni campo, questo risolverebbe il problema. Grazie per l'aiuto

Dai un'occhiata al nuovo link che ho aggiunto nella risposta. Penso che sarebbe la strada da percorrere.

Questo è uno script plug-and-play fantastico che utilizzo e funziona perfettamente con gli array serializzati che WordPress utilizza per memorizzare le opzioni. Assicurati solo di eliminarlo dal tuo server remoto una volta terminato, poiché rappresenta un ENORME rischio per la sicurezza.
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

Per questo utilizzo WP-CLI perché lo trovo il metodo più semplice e si occupa automaticamente dei dati serializzati.
wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid
Esiste anche un'opzione che scrive le modifiche in un file SQL invece di manipolare direttamente il database:
wp search-replace foo bar --export=database.sql

non devi farlo, puoi utilizzare percorsi relativi.
quando colleghi qualcosa invece di subdominio.esempio.com/immagine.jpg - usa /immagine.jpg per esempio
così non affronterai il problema fin dall'inizio.
altrimenti per un'istruzione di aggiornamento mysql puoi usare
update NOME_TABELLA set NOME_CAMPO = replace(NOME_CAMPO, ‘trova questa stringa’, ‘sostituisci la stringa trovata con questa stringa’);

Grazie... sì lo farò la prossima volta. L'istruzione SQL esegue una ricerca e sostituzione sull'intero database (comprese tutte le tabelle)?

@NetConstructor.com L'istruzione SQL che mireille ti ha fornito sopra è il comando generico di MySQL per sostituire una stringa in un campo specifico di una tabella specifica. Se provassi a eseguire questa istruzione così com'è scritta, non funzionerebbe. Per far funzionare questo comando, dovresti cambiare TABLE_NAME & FIELD_NAME con un campo e una tabella reali utilizzati da WordPress.

Nota anche che se desideri utilizzare percorsi relativi, molte parti di WordPress tendono a inserire automaticamente percorsi assoluti. Per ottenere davvero questo risultato, un plugin come: https://wordpress.org/plugins/root-relative-urls/ è molto, molto utile

Per cambiare il dominio di WordPress, cosa che spesso ci serve, ad esempio per mettere online un sito da localhost: ecco una lista completa di query di aggiornamento:
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
- Dobbiamo anche aggiungere altre tabelle che non sono di default in WP se necessario.
AGGIORNAMENTO: Search Replace DB versione 3.1.0 è uno strumento user-friendly, con interfaccia front-end per sviluppatori, che permette di eseguire operazioni di ricerca/sostituzione su tutto il database, senza danneggiare stringhe o oggetti PHP serializzati.

In realtà non è necessario utilizzare una query SQL, bastano alcune modifiche nei file wp_config.php e functions.php del tuo tema. Dai un'occhiata a questo argomento nel Codex di WordPress: https://codex.wordpress.org/Changing_The_Site_URL
