Comment migrer son blog ou site Web en local de façon synchronisée  sans passer par la fonction « exporter / importer » de WordPress ? Comment obtenir les mêmes ID de ses posts et catégories dans les deux blogs ?  Ou migrer un blog d’une url à une autre?

MySql fait travailler les neurones

MySql fait travailler les neurones

Réponse: via phpmyadmin et requêtes SQL

Si vous avez installé un wordpress local et utilisé la fonction « importer/exporter » de WordPress, vous aurez sûrement constaté que vous n’obtenez pas les mêmes ID pour vos articles, catégories, etc. ce qui vous empêche de travailler efficacement. Éviter de passer par là permet de synchroniser son blog entre le local et le « en ligne » et, surtout, vous évite de vous prendre la tête. Car refaire ses réglages paramétrés à l’identique prend du temps.

Pour mon premier billet, voici partagée une manœuvre simplifiée que j’ai effectuée ce matin. Il y a plus d’un an j’ai crée un site web pour un auteur. J’aimerai aujourd’hui y apporter quelques améliorations et tester certaines fonctions en vue de l’arrivée de WordPress 2.9. Comme je veux éviter de la déranger et risquer de planter un site qui n’est pas à moi, la copie locale et synchronisée s’impose.

Si vous avez beaucoup de blogs ou que vous voulez synchroniser un site existant avec sa copie en local, la procédure habituelle est plutôt longue et fastidieuse. Voici quelques trucs pour passer outre.
J’ai testé cette méthode avec Easyphp 5.3.0. mais le principe est le même si vous utilisez wamp.

(Sautez les étapes ou adaptez-les en fonction de ce que vous avez déjà fait ou de votre situation)

0.1 SAUVEGARDER / COPIER SON BLOG SUR SON DISQUE DUR

Pendant que vous lisez cet article, profitez-en pour télécharger tout dossier pertinent sur votre disque dur. Soit tout le wp-content et autres dossiers ajoutés (sous-domaines, par exemple). Une sauvegarde ne fait pas de tort, anyway.

1° CRÉER UNE TABLE EN LOCAL

(si vous en avez déjà une et qu’elle n’a pas le même nom que celle en ligne, changez son nom pour les faire correspondre).
Si inexistante, créez une table de données dans l’administration de Easyphp.
Easyphp : clic droit sur l’icône, choisir « Administration ». Une page s’ouvre, choisissez (à la 3e ligne) « mysql administration ». Une autre page s’ouvre, vous êtes dans phpmyadmin local.

2° EXPORTER SA BASE DE DONNÉES DU BLOG EN LIGNE

Allez dans votre console phpmyadmin (sur votre serveur). Profitez-en pour optimiser votre table… (optimiser permet d’effacer les traces inutiles, vidange qui accélère un peu l’accès à votre blog). Ensuite, exportez votre base en version zippée.

3° WP-CONFIG ET INSTALLATION

Dans le repertoire « www » de Easyphp, créez un dossier avec le nom désiré pour votre copie locale.
Exemple: /monsitelocal/
Balancez-y votre copie favorite d’un WordPress flambant neuf (ou bidouillé par vos soins ?).
Et si vous les avez déjà téléchargés, votre wp-content et tous dossiers ajoutés par vos soins.

Renommez le wp-config-sample.php en wp-config.php
Remplissez-le en prenant soin de mettre le même préfixe que votre blog en ligne

/** Le nom de la base de données de WordPress. */
define('DB_NAME', 'nom-de-la-base-comme-celle-en-ligne');
/** Utilisateur de la base de données MySQL. */
define('DB_USER', 'root');
/** Mot de passe de la base de données MySQL. */
define('DB_PASSWORD', 'mysql');
/** Adresse de l'hébergement MySQL. */
define('DB_HOST', 'localhost');

Reste le préfixe. Ne changez rien si vous ne l’avez pas modifié et inversement (idéalement changez toujours le préfixe pour augmenter la sécurité de votre blog).

$table_prefix  = 'wp_';

4° IMPORTER SA BASE DE DONNÉES VERS LE LOCAL

Retournez ou allez dans votre console mysqladmin local de Easyphp. Importez la base version en ligne exportée plus haut.
Si vous aviez déjà une installation WordPress avec une base, commencez par supprimer celle-ci
Ceci fait, tout est importé : articles, commentaires, sauf les images. Les URL des images sont celles de votre blog en ligne, et là tout dépendra de votre choix.

Si ce n’est déjà fait, mettez tous vos dossiers images, wp-content dans /monsitelocal/. (facultatif car tout y est déjà, normalement)
Maintenant, tout est conforme. Si conforme que si vous tentez de vous connecter au local http://127.0.0.1/monsitelocal vous aboutirez… à celui en ligne.

Quelques requêtes sql et tout sera résolu. Dans votre base, il faut corriger l’URL du site pour la changer en local.
Repérez « options » et trouvez « website_url » puis repérez aussi wp_options et trouvez « siteurl ».

Maintenant changez l’URL du site

UPDATE wp_options SET option_value = replace(option_value, 'http://www.mon-site-en-ligne.com', 'http://mon-site-en-local') WHERE option_name = 'home' OR option_name = 'siteurl';

Changez aussi l’URL relative:

UPDATE wp_posts SET guid = replace(guid, 'http://www.mon-site-en-ligne.com','http://127.0.0.1/monsitelocal');

Tout est maintenant identique. Vous pouvez travailler, vos articles ont les mêmes ID.
A noter que si vous avez changé vos permaliens, en local il vous faudra le faire aussi. Ce qui pose problème et peut être résolu en ajoutant index.php avant la structure personnalisée (dans Réglages, Permaliens):

/index.php/%postname%/%category%/

Si vous avez besoin de travailler  sur vos images (les voir), donc changer leur url, il vous faudra soit passer par une requête sql, soit un plugin.

Requête sql :

pour remplacer les vieilles URL du contenu des articles (donc les images) par la nouvelle:

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.mon-site-en-ligne.com','http://127.0.0.1/monsitelocal');
Plugins utiles :

velvet-blues-update-urls permet de migrer ses images d’une ancienne adresse à un autre
Cache-images permet de ramener les images hotlinkees dans son propre dossier upload
Redirection permet les redirections définitives

Et si un plugin ou deux vous la joue en mode erreur, désactivez-les puis réactivez-les. Même chose pour votre navigateur, effacez le cache pour supprimer les cookies.
Voilà. Bien sûr vous pouvez effectuer la même opération dans l’autre sens ou pour migrer à une autre adresse.

Liens utiles et sources: