Wordpress

Synchroniser son blog WordPress en local

Migrer son blog ou site Web en local de façon synchronisée via SQL, sans passer par la fonction importer de Wordpress et avoir les mêmes ID de ses posts et catégories. Ou migrer un blog d’une url à une autre.

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

1
2
3
4
5
6
7
8
/** 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');
/** 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).

1
$table_prefix  = 'wp_';
$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

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

1
UPDATE wp_posts SET guid = replace(guid, 'http://www.mon-site-en-ligne.com','http://127.0.0.1/monsitelocal');
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):

1
/index.php/%postname%/%category%/
/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:

1
UPDATE wp_posts SET post_content = replace(post_content, 'http://www.mon-site-en-ligne.com','http://127.0.0.1/monsitelocal');
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:

commentaires

  • Bonjour,
    Merci pour ce tuto, je voulais justement modifier mon site, et pour ce faire, le récupérer en local pour tester différents trucs.
    Par contre, en lisant le titre, je pensais qu’il allait y avoir une méthode de synchro automatique du serveur distant sur le local, ce qui serait pratique pour avoir une sauvegarde de son site sur son pc.

  • Bonsoir Romain,
    Hélas ce que tu demandes n’existe pas, du moins pas à ma connaissance. La synchronisation n’est pas automatique. Ceci dit, s’il s’agit de simples billets à synchroniser, il est bien plus simple soit de les écrire directement sur son blog en ligne sans les publier, soit d’exporter les dits articles. Cette possibilité étant plus longue que de copier coller son article ou le rédiger en brouillon, je n’en vois pas l’intérêt.
    Concernant la synchronisation du design de son site, il suffit de procéder comme ci dessus ou d’uploader les fichiers de son nouveau template en écrasant les anciens.

  • Bonjour,
    je sais que ce tuto a été fait il y a un bout de temps, mais je tente quand même ma chance ^^.
    Voici mon problème : j’ai suivi toutes les instructions du tuto, mais lorsque je tape l’url « http://localhost/monsite » je tombe sur le site en ligne.
    Pour informations j’utilise UwAmp 1.3 et quand je vais dans phpMyAdmin ce message apparaît : « La version de votre bibliothèque MySQL (5.0.51a) diffère de la version de votre serveur MySQL (5.1.44) »

    Quelqu’un aurait-il une solution ?
    Merci d’avance.

    PS : Quelle est la différence entre les modes « Online » et « Offline » d’Apache dans UwAmp ?

      • Bonjour,

        merci pour votre réponse, j’ai modifié dans la base de données tous les liens menant vers le site en ligne par des liens menant vers le site en local (www.monsite.com -> localhost/monsite).

        J’ai également modifié la ligne suivante du fichier wp-config.php :
        define(‘DOMAIN_CURRENT_SITE’, ‘www.monsite.com’ ); ->
        define(‘DOMAIN_CURRENT_SITE’, ‘localhost/monsite’ );

        Désormais je ne suis plus redirigé vers le site en ligne, je reste bien sur l’url du site en local, mais le message suivant est affiché :
        « Firefox a détecté que le serveur redirige la demande pour cette adresse d’une manière qui n’aboutira pas. La cause de ce problème peut être la désactivation ou le refus des cookies. »

        J’ai remarqué que dans le fichier wp-config.php il est possible de « changer les clefs uniques d’authentification » ce qui « invalide tous les cookies de connexions existantes et forcera tous les utilisateurs à se reconnecter. »

        Une idée ?

        Merci d’avance.

  • Sous google chrome voici le message :

    « La page Web à l’adresse http://localhost/monsite/ a déclenché trop de redirections. Pour résoudre le problème, effacez les cookies de ce site ou autorisez les cookies tiers. Si le problème persiste, il peut être dû à une mauvaise configuration du serveur et n’être aucunement lié à votre ordinateur. »

    « Erreur 310 (net::ERR_TOO_MANY_REDIRECTS) : Trop de redirections »

  • Bonjour,

    Après avoir lu les tutos et essayer comme un forcené je décide de poster. Dans le cadre d’un stage, je travail actuellement sur des sites WordPress (avec Wamp ,que j’ai configuré sur le port 8080 et phpMyAdmin) et j’ai un soucis lorsque je veux importer une base qui se situe sur le ftp. Je n’ai soit aucune connexion au serveur local soit, lorsque cela marche (une seule fois sur toute la journée donc autant dire jamais) une page blanche quand je change les url dans la base de donnée quelqu’un aurait-il une idée de la façon dont je pourrai régler mon problème?

    Merci.

    • J’ai trouvé mon problème c’est qu’il faut tout enlever à la moindre manipulation et tout recommencer de zéro
      Petite remarque si vous changer les ports de wamp ou mamp, ect… les commandes SQL deviennent :
      UPDATE wp_options SET option_value = replace(option_value, ‘URL’, ‘http://localhost:nouveau-port/inctrl’) WHERE option_name = ‘home’ OR option_name = ‘siteurl’
      UPDATE wp_posts SET guid = replace(guid, ‘URL’,’http://127.0.0.1:nouveau-port/inctrl’)

  • Ca a du un peu changer depuis ton poste, j’ai du un peu bidouillé (pas trouvé de table « option » juste la 37eme ligne de wp_option il faut changer home) mais dans l’ensemble tu me sauve la vie ! Je t’aimmme mdr

  • Ouf, merci pour ce tuto, je galèrais depuis deux jours sans trouver d’info pour faire ça.
    Surtout pour ce qui concerne les scripts sql!
    Pour ceux qui aurait une page blanche en front au final, j’ai trouvé la solution sur seomix
    En ce qui me concerne le fait de changer de thème à résolut le pb.

    Je confirme également ce qu’a dit pierrek, pour mamp en tout cas, il faut indiquer le port dans la requete sql ex: localhost:8888/wordpress

  • Cool !
    Après avoir copié en local, j’avais que des 404 et je comprenais pas pourquoi, comment, etc.
    J’ai désactivé plein de plugins, changé qq params à la mimine, cherché des infos et là je suis tombé sur ton post.
    J’avais tout fait ok mais il me manquait un param.
    C’était le permalien : rajouter index.php/

    Merci du tuyau.

Répondre à pierrek X