Quale query SQL fare una semplice ricerca e sostituzione


20

Ogni volta che creo un nuovo sito Web, per prima cosa 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 per "subdomain.domain-name.com" e lo sostituisco con "domain-name.com" ... finalmente lo importa in un nuovo database per il sito live.

La mia domanda è ... quale query SQL dovrei eseguire se volessi semplicemente fare questa ricerca / sostituzione sull'intero database usando phpmyadmin?

-CH


Se non hai familiarità con le query, prova il plug-in Cerca e sostituisci, wordpress.org/extend/plugins/search-and-replace
t31os

Perché non utilizzare la funzionalità di WordPress per aggiornare l'URL? codex.wordpress.org/Moving_WordPress dettaglia tutto
Alex Older,

C'è un plugin per questo. Consente un comodo utilizzo del backend e sostituisce anche l'URL nel post-content e in alcuni altri campi, se si desidera: wordpress.org/plugins/better-search-replace
simonthesorcerer

Risposte:


13

La tabella in cui viene salvato il tuo URL è wp_options. Dovresti fare un aggiornamento sulle colonne che utilizzano l'URL per il tuo sito:

UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"

Potrebbe mancare un po 'di valore, ma ogni volta che esegui nuovamente questo processo di ricerca / sostituzione, puoi notare i valori e le tabelle che dovrebbero essere aggiornati e aggiungerli a questo script.

WordPress Codex ha una bella guida su come cambiare l'URL di un sito, forse è ancora più utile per te: cambiare l'URL del sito


1
non esiste un modo per trovare / sostituire l'intero database? In altre parole ... ho notato, ad esempio, che ho bisogno di sostituire gli URL in un sacco di posizioni diverse tra cui la libreria multimediale .... Se ci fosse una ricerca / sostituzione per l'intero database essenzialmente per ogni campo, questo risolverebbe il problema. Grazie per l'aiuto
NetConstructor.com il

Dai un'occhiata a quel nuovo link che ho aggiunto alla risposta. Penso che sarebbe la strada da percorrere.
Fernando Briano,

1
Questo non funzionerà per i dati serializzati. Potrebbe interrompere completamente una configurazione del tema.
Christian Lescuyer,

29

Meglio fare opzioni, post, post contenuti e post meta:

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 dei dati usando phpMyAdmin e MySQL | Packt Publishing. E Search RegEx è un buon plugin WP per essere in grado di cercare e sostituire con Grep attraverso tutti i post e le pagine.

Aggiornamento del 16/06/2015: utilizzare lo strumento collegato nella frase successiva è molto meglio, poiché una semplice ricerca / sostituzione come sopra in un dump del database interromperà i dati serializzati. Vedi interconnectit.com Strumento Sostituisci ricerca PHP serializzato WordPress. In questo modo, non si interrompono i dati serializzati e non sarà necessario eseguire RegEx sul contenuto dei post, poiché lo script di interconnessione modifica gli URL ovunque. Uso sempre questo strumento per migrare siti su domini diversi o semplicemente per fare una modifica globale da http a https per forzare SSL senza plugin e cambiare tutti gli URL nel contenuto per prevenire errori di elementi non sicuri.


2
Non cambiare mai la guida, anche se vai in un nuovo dominio. Viene utilizzato per identificare in modo univoco il post in quanto l'ID può cambiare se i post vengono esportati / importati in un nuovo database. Per prima cosa, i lettori RSS useranno il GUID per dire se un particolare articolo è stato letto o meno. La modifica del guid ripubblicherà efficacemente tutti i tuoi articoli.
Taylor Dewey,

@taylordewey ha detto: "Non cambiare mai il guid ..." Spazzatura.
markratledge,

1
@songdogtech Cura di spiegare perché è spazzatura?
shea,

1
Perché si dovrebbe avere per cambiare il GUID?
Kaiser,

1
Questo non funzionerà per i dati serializzati. Potrebbe interrompere completamente una configurazione del tema. Effettivamente utilizzare uno strumento come Interconnect / IT.
Christian Lescuyer,

9

Questo è un ottimo script drop-in che uso e funziona magnificamente con gli array serializzati che WP usa per memorizzare le opzioni. Assicurati di eliminarlo dal tuo server remoto quando hai finito perché è un enorme rischio per la sicurezza.

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/


2
Non so perché fossi -1. Questo script è molto meglio di un'istruzione SQL. Feedback per favore?
Lancemonotone,

1
uno strumento che le persone che non conoscono sql possono usare, è sconvolgente per coloro che scrivono in sql
Jon

4

Per questo utilizzo WP-CLI perché lo trovo il più semplice e si occupa dei dati serializzati.

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

C'è anche un'opzione che scrive le tue modifiche in un file SQL invece di manipolare il database effettivo:

wp search-replace foo bar --export=database.sql


di gran lunga la soluzione più robusta e veloce. wp-cli salva ancora una volta il giorno
Ryanrain il

3

non devi farlo, puoi usare percorsi relativi.

quando colleghi qualcosa invece di subdomain.soemthing.com/image.jpg - usa /image.jpg per esempio

in questo modo non dovrai affrontare il problema in primo luogo.

altrimenti per un'istruzione di aggiornamento mysql è possibile utilizzare

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, find this string’, replace found string with this string’);

Grazie ... sì, lo farò la prossima volta. L'istruzione SQL sostituisce l'intero database (comprese tutte le tabelle)?
NetConstructor.com il

@ NetConstructor.com L'istruzione SQL fornita da mireille sopra è il comando generico MySQL per sostituire una stringa in un campo specifico in una tabella specifica. Se provassi a eseguire questa affermazione esattamente come è stata scritta, non funzionerebbe. Affinché questo comando funzioni, è necessario modificare TABLE_NAME & FIELD_NAME in un campo e una tabella reali utilizzati da WordPress.
Manzabar,

Si noti inoltre che anche se si desidera utilizzare percorsi relativi, molte parti di wordpress tendono ad inserire automaticamente percorsi completi. Per far funzionare davvero un plugin come: wordpress.org/plugins/root-relative-urls è molto, molto utile
benz001,

2

Per cambiare il dominio wordpress di cui spesso abbiamo bisogno, potrebbe essere quello di rendere il sito live da localhost: questo è un elenco completo 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 predefinite con WP, se necessario.

AGGIORNAMENTO: Cerca Sostituisci DB versione 3.1.0 è uno strumento intuitivo e di front-end per sviluppatori, che consente di eseguire ricerche di ricerca / sostituzione a livello di database, che non danneggiano stringhe o oggetti serializzati PHP.


2
Questo non funzionerà per i dati serializzati. Potrebbe interrompere completamente la configurazione del tema.
Christian Lescuyer,

-1

In realtà, non è necessario utilizzare una query SQL, ma solo alcune modifiche nel file wp_config e Functions.php nel tema. Dai un'occhiata a questo argomento nel codice Wordpress: https://codex.wordpress.org/Changing_The_Site_URL


1
Questo non è corretto Purtroppo WordPress memorizza alcuni URL nel database come testo.
s_ha_dum,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.