Comment remplacer le nom de domaine dans une base de données Wordpress?

12

J'ai une base de données Wordpress qui a été installée dans un environnement de développement ... ainsi, toutes les références au site lui-même ont une adresse IP fixe (disons 192.168.16.2). Maintenant, je dois migrer cette base de données vers une nouvelle installation Wordpress sur un hébergement. Le problème est que le vidage SQL contient beaucoup de références à l'adresse IP, et je dois le remplacer par: mon_domaine.com.

Je pourrais utiliser sedou une autre commande pour changer cela à partir de la ligne de commande, le problème est qu'il y a beaucoup de données de configuration qui utilisent JSON. Et alors? Eh bien, comme vous le savez, les tableaux JSON utilisent des choses comme: s:4:pour savoir combien de caractères a un élément, et donc, si je remplace simplement l'IP par le nom de domaine, les fichiers de configuration seront corrompus.

Il y a quelques années, j'ai utilisé une application pour Windows qui permet de modifier les valeurs d'une base de données et prend en charge les tableaux JSON. Malheureusement, j'ai oublié le nom de l'application ... alors la question est: connaissez-vous une application qui me permet de faire ce que je veux?

Cristian
la source
1
Ce n'est pas une réponse complète, mais cela pourrait vous aider à en chercher une: les données que vous regardez ne sont pas au format JSON. JSON ne stocke pas (normalement) les types de valeurs et les longueurs comme ça. Ce que vous regardez, ce sont des données SERIALISEES. Une recherche google pour "mysql replace serialized" donne cette page, ce qui pourrait aider: davidcoveney.com/…
MathSmath
Hé, votre commentaire est la seule réponse qui m'a été utile ... déplacez-le vers une réponse pour le marquer comme correct. Merci!
Cristian
Heureux que cela ait aidé! Je l'ai posté comme réponse.
MathSmath

Réponses:

7

Les données que vous regardez ne sont pas au format JSON. JSON ne stocke pas (normalement) les types de valeurs et les longueurs comme ça. Ce que vous regardez, ce sont des données SERIALISEES. Une recherche google pour "mysql replace serialized" donne cette page, ce qui pourrait aider: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

MathSmath
la source
Merci ... J'ai travaillé comme développeur PHP pendant 2 ans. Je ne peux pas croire que j'ai oublié la différence entre quelque chose de sérialisé et une chaîne JSON.
Cristian
8

Le Codex a un guide décent - Changer l'URL du site .

Fondamentalement, il y a plusieurs endroits où l'URL compte ou pas tellement (j'en manque peut-être):

  • homeet les siteurloptions qui contrôlent où WP pense que le site est;
  • publier des GUID, ceux-ci ressemblent à des liens mais en réalité ils ne le sont pas - seulement des identifiants. Je ne suis pas absolument sûr qu'ils ne soient pas pertinents, mais j'ai eu beaucoup de changements d'URL sur la pile de test et je n'ai jamais pris la peine de les mettre à jour.
  • liens dans les corps de poste;
  • éventuellement des liens dans les paramètres du plugin.
Rarst
la source
Il y a pas mal d'étapes. Une fois que mv olddir.com newdir.comvous aurez besoin de reconfigurer votre serveur Web, redémarrez le serveur Web. Suivez les instructions du codex ici et vous devriez pouvoir vous connecter en tant qu'administrateur. Cela devrait vous aider à démarrer :-)
PJ Brunet
6

Comme Rarst l'a dit ci-dessus, il n'y a que deux paramètres dans la base de données qui doivent être modifiés. Après avoir importé la base de données, je me connecte à PHPMyAdmin et édite la base de données directement.

J'utilise un serveur de développement sur mon PC tout le temps pour importer des flux de données et ils ont l'URL attachée aux messages le long de http: // localhost / testsite / post-name / et cela n'a jamais causé de problème.

J'avais l'habitude d'utiliser une recherche SQL et de remplacer jusqu'à ce que je réalise que cela n'avait pas d'importance. J'ai migré quelques sites d'un domaine à un autre et où j'ai eu des URL absolues dans le contenu, j'utiliserai l'option de recherche et de remplacement SQL.

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

David

David Law
la source
Il existe certains plugins, comme ContactForm7, qui enregistre également le nom de domaine dans une chaîne sérialisée, parmi d'autres variables de configuration. Lorsque vous modifiez une chaîne sérialisée, elle peut être corrompue si sa longueur change, donc en fait, parfois, il y a plus de choses à changer que deux paramètres.
Cristian
3

Vous pouvez définir ces valeurs avec des constantes dans le wp-config.php. Après cela, vous pouvez, quand vous le souhaitez, modifier les entrées de la base de données via le plugin Adminer. Écrivez ceci dans le wp-config.phpet les valeurs dans le DB ne sont pas pertinentes:

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

Requêtes SQL simples - aucune tâche de REMPLACEMENT compliquée n'est requise:

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';

Utilisez ceux avec PHPMyAdmin ou tout autre moyen que vous préférez pour accéder à la base de données.

marque
la source
2

Assurez-vous que la nouvelle base de données est sélectionnée, puis exécutez des mises à jour SQL et des commandes de remplacement sur les tables, notamment wp_options, wp_posts, wp_postmeta.

Utilisez le code ci-dessous et permutez vos anciennes et nouvelles URL, sans barres obliques de fin. Si nécessaire, modifiez également les valeurs de préfixe de table, le cas échéant (par exemple 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');
user129645
la source
1

C'est une très vieille question, mais comme je l'ai rencontrée en cherchant autre chose, j'ai pensé l'ajouter pour référence future.

Je pense que la façon la plus simple et la plus complète de le faire est d'utiliser searchreplacedb2.php. Il peut être trouvé ici: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ avec une explication de son utilisation.

Cela m'a certainement fait gagner beaucoup de temps avec la migration des environnements de développement vers les environnements vivants sur mes sites wordpress.

Assurez-vous simplement de le supprimer d'un serveur public une fois que vous avez terminé!

MatthewLee
la source
0

Je vois que vous souhaitez déplacer votre site WordPress de l'environnement de développement vers un nouveau serveur ou serveur de production.

Récemment, j'ai déplacé mon site vers le serveur de production et je suis confronté à la même situation. J'ai besoin de mettre à jour l'URL du site car WordPress a stocké l'URL du site dans la base de données.

J'ai trouvé une bonne requête MySQL en utilisant que je peux facilement changer d'URL directement à partir de la base de données.

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);

Il vous suffit de remplacer l'URL de votre site de l'ancien nom de domaine vers le nouveau domaine, puis d'exécuter la requête sur MySQL à l'aide de PHPMYADMIN.

Pour plus de référence, vous pouvez lire ce tutoriel.

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

Renish Khunt
la source