Come sostituire il nome di dominio in un database Wordpress?


12

Ho un database Wordpress che è stato installato in un ambiente di sviluppo ... quindi tutti i riferimenti al sito stesso hanno un indirizzo IP fisso (diciamo 192.168.16.2). Ora, devo migrare quel database in una nuova installazione di Wordpress su un hosting. Il problema è che il dump SQL contiene molti riferimenti all'indirizzo IP e devo sostituirlo con: my_domain.com.

Potrei usare sedo qualche altro comando per modificare quello dalla riga di comando, il problema è che ci sono molti dati di configurazione che usano JSON. E allora? Bene, come sapete, le matrici JSON usano cose come: s:4:per sapere quanti caratteri ha un elemento e quindi, se sostituisco semplicemente l'IP con il nome di dominio, i file di configurazione verranno danneggiati.

Ho usato un'app per Windows alcuni anni fa che consente di modificare i valori in un database e si occupa degli array JSON. Sfortunatamente, ho dimenticato il nome dell'app ... quindi la domanda è: conosci qualche app che mi permetta di fare quello che voglio?


1
Questa non è una risposta completa, ma potrebbe aiutarti nella ricerca di una: i dati che stai guardando non sono formattati JSON. JSON (normalmente) non memorizza tipi di valore e lunghezze del genere. Quello che stai guardando sono i dati SERIALIZZATI. Una ricerca su Google per "mysql sostituisce serializzato" produce questa pagina, il che potrebbe aiutare: davidcoveney.com/…
MathSmath,

Ehi, il tuo commento è l'unica risposta che mi è stata utile ... spostalo in una risposta per contrassegnarlo come corretto. Grazie!
Cristian,

Sono contento che abbia aiutato! L'ho pubblicato come risposta.
MathSmath,

Risposte:


7

I dati che stai visualizzando non sono formattati JSON. JSON (normalmente) non memorizza tipi di valore e lunghezze del genere. Quello che stai guardando sono i dati SERIALIZZATI. Una ricerca su Google per "mysql sostituisce serializzato" produce questa pagina, che potrebbe aiutare: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/


Grazie ... Ho lavorato come sviluppatore PHP per 2 anni. Non riesco a credere di aver dimenticato la differenza tra qualcosa di serializzato e una stringa JSON.
Cristian,

8

Codex ha una guida decente - Modifica dell'URL del sito .

Fondamentalmente ci sono diversi posti dove l'URL è importante o meno (potrei mancarne alcuni):

  • homee siteurlopzioni che controllano dove WP pensa che sia il sito;
  • postare GUID, questi sembrano collegamenti ma in realtà non lo sono - solo identificatori. Non sono assolutamente sicuro che siano irrilevanti, ma ho fatto cambiare molto gli URL nello stack di test e non mi sono mai preso la briga di aggiornarli.
  • collegamenti negli organi postali;
  • eventualmente collegamenti nelle impostazioni del plugin.

Ci sono alcuni passaggi. Dopo aver mv olddir.com newdir.comeffettuato la riconfigurazione del server Web, riavviare il server Web. Segui le istruzioni del codice qui e dovresti essere in grado di accedere come amministratore. Dovresti iniziare :-)
PJ Brunet,

6

Come Rarst ha detto sopra, nel database sono necessarie solo due impostazioni che DEVONO cambiare. Dopo aver importato il database accedo a PHPMyAdmin e modifico direttamente il database.

Uso sempre un server di sviluppo sul mio PC per importare feed di dati e hanno l'URL collegato ai Post sulla falsariga di http: // localhost / testite / post-name / e non ha mai causato problemi.

Usavo una ricerca SQL e la sostituivo fino a quando non mi resi conto che non aveva importanza. Ho migrato alcuni siti da un dominio a un altro e in cui ho avuto URL assoluti nel contenuto userò l'opzione di ricerca e sostituzione SQL.

update wp_posts set post_content = replace(post_content,'http://www.olddomain/','http://www.newdomain/');

David


Esistono alcuni plugin, come ContactForm7, che salva anche il nome di dominio all'interno di una stringa serializzata, insieme ad altre variabili di configurazione. Quando modifichi una stringa serializzata, può danneggiarsi se cambia la sua lunghezza, quindi in effetti, a volte, ci sono più cose da cambiare che solo due impostazioni.
Cristian,


3

È possibile impostare questi valori con costanti in wp-config.php. Dopodiché puoi, quando vuoi, modificare le voci nel database tramite Plugin Admin. Scrivi questo nel wp-config.phpe i valori nel DB non sono rilevanti:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');


2

Query SQL semplici - non sono necessarie cose complicate di SOSTITUZIONE:

update wp_options set option_value = 'http://mynewdomain.com' where option_name = 'siteurl';

update wp_options set option_value = 'http://mynewdomain.com' where option_name = 'home';

Usa quelli con PHPMyAdmin o qualsiasi altro modo che preferisci per accedere al database.


2

Assicurati di aver selezionato il nuovo database, quindi esegui alcuni aggiornamenti sql e comandi di sostituzione sulle tabelle, in particolare wp_options, wp_posts, wp_postmeta.

Usa il codice come di seguito e scambia i tuoi vecchi e nuovi URL, senza barre finali. Inoltre, se necessario, modificare i valori del prefisso della tabella ove applicabile (ad es. Wp_)

UPDATE wp_options SET option_value = replace(option_value, 'http_www.oldurl', 'http_www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';    
UPDATE wp_posts SET guid = replace(guid, 'http_www.oldurl','http_www.newurl');    
UPDATE wp_posts SET post_content = replace(post_content, 'http_www.oldurl', 'http_www.newurl');    
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http_www.oldurl','http_www.newurl');

1

Questa è una domanda molto antica, ma da quando l'ho trovata mentre cercavo qualcos'altro, ho pensato di aggiungerla come riferimento futuro.

Penso che il modo più semplice e completo per farlo sia usare searchreplacedb2.php. Può essere trovato qui: http://interconnectit.com/products/search-and-replace-for-wordpress-database/ insieme a una spiegazione del suo utilizzo.

Mi ha sicuramente risparmiato un sacco di tempo con la migrazione da sviluppatori agli ambienti live sui miei siti wordpress.

Assicurati di eliminarlo da un server pubblico dopo aver finito!


0

Vedo che vuoi spostare il tuo sito WordPress dall'ambiente di sviluppo a un nuovo server o server di produzione.

Di recente, ho spostato il mio sito sul server di produzione e ho affrontato la stessa situazione. Devo aggiornare l'URL del sito perché WordPress ha archiviato l'URL del sito nel database.

Ho trovato una buona query MySQL usando che posso facilmente cambiare URL direttamente dal database come.

SET @search := "http://olddomain.com";
SET @replace := "http://newdomain.com";

UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "siteurl";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "home";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "product_list_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "shopping_cart_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "checkout_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "widget_text";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerImageLogo";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "cunjo_plugin_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "wpsr_socialbt_data";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "issuem";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "_transient_dgxdonate_t70pbg1htu_1396322372";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "dgx_donate_log";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerBackgroundImage";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "transact_url";
UPDATE `wp_postmeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_usermeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_posts` SET `guid`=REPLACE(guid, @search, @replace);
UPDATE `wp_posts` SET `post_content`=REPLACE(post_content, @search, @replace);

Devi solo sostituire l'URL del tuo sito dal vecchio nome di dominio al nuovo dominio, quindi eseguire la query su MySQL utilizzando PHPMYADMIN.

Per ulteriori riferimenti, puoi leggere questo tutorial.

https://tryvary.com/wordpress-change-url-in-database-using-mysql-query/

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.