Dupliquer un site WordPress en local par copie de la Base de Données

Dupliquer un site WordPress de production vers une plateforme de développement local WampServer permet de tester les modifications plus rapidement et plus sûrement que sur le serveur distant.
Les modifications validées localement peuvent être reportées sur le site de production en évitant de le rendre indisponible suite à une erreur de programmation.

WordPress se compose de fichiers et d’une Base de Données. Dupliquer les deux permet d’obtenir la copie la plus proche possible de l’original.  Sauf qu’il faut entre autres intervenir dans la Base de Données pour remplacer les références vers l’ancien site par des références vers le nouveau site. Rien de bien compliqué, mais cela doit être réalisé avec soin.

Recopier les fichiers du site distant

Nous installons WordPress dans un sous-répertoire  « demo »  de WampServer.

Avec un client FTP comme FileZilla, nous recopions l’ensemble des fichiers du site distant. De cette façon, nous obtenons une duplication exacte de tous les fichiers, y compris les fichiers de thèmes, d’extensions (plugins) et de médias contenus dans le répertoire « wp-content » :

Dupliquer un site - transfert de WordPress
Dupliquer un site – transfert de WordPress

Créer un « hôte virtuel »

Créer un  hôte virtuel permettra d’accéder au site local à l’adresse « http://demo ».

L’article ci-dessous explique la méthode pour créer un « hôte virtuel » dans WampServer :

Toujours créer un hôte virtuel (Virtual Host) avec WampServer

Nous créons l’hôte virtuel « demo » :

Formulaire de création d'un hôte virtuel : saisir nom de l'hôte et chemin d'accès au répertoire correspondant
Création de l’hôte virtuel demo
Haut de page

Exporter la Base de Données du site de production

Ce point a déjà été traité dans l’article WordPress et MySQL. Votre hébergeur doit vous fournir les éléments nécessaires pour gérer la Base de Données.

L’ensemble des tables du site doivent être exportées : les tables standard WordPress et les éventuelles tables créées par des extensions. En pratique, il faut sélectionner toutes les tables dont le préfixe est le même que celui des tables standard WordPress du site (« wp_ » si vous n’avez pas modifié le préfixe des tables) :

  1. sélectionner la Base de Données,
  2. cliquer sur l’onglet,
  3. s’il y a d’autres tables que celles du site à dupliquer, choisir l’option de personnalisation,
  4. sélectionner les tables du site à dupliquer (y compris celles des extensions),
  5. tout en bas de page, cliquer sur le bouton
Cliquer sur le bouton radio de l'option de peronnalisation et cliquer sur les boîtes à coche correspondant aux tables à exporter
Opter pour la personnalisation afin de pouvoir choisir les tables exportées
Haut de page

Créer la nouvelle Base de Données

La création d’une nouvelle base dans WampServer se fait très simplement depuis phpMyAdmin :

  1. Cliquer sur l’icône WampServer :  Icône WampServer OK,
  2. dans le menu qui apparaît, cliquer sur « phpMyAdmin :

    WampServer - accéder à phpMyAdmin
    WampServer – accéder à phpMyAdmin
  3. se connecter (si ce n’est pas déjà fait) :

    Formulaire de connexion à MySql : sasir identifiant et mot de passe
    Connexion à MySql
  4. créer une nouvelle base
Dans la colonne de gauche, cliquer sur "Nouvelle Basede Données"
Créer une nouvelle base
Saisir le nom de la table et cliquer sur le bouton "Créer"
Saisir le nom de la table

 

Il est aussi tout à fait possible d’ajouter les tables à une base existante. Il suffit que les préfixes de table ne soient pas déjà utilisés. C’est ce que nous allons faire dans notre exemple.

 

Haut de page

Importer les tables

Nous allons intégrer les tables importées dans la base  « demo » existante :

  • sélectionner la Base de Données « demo »,
  • cliquer sur le bouton (éventuellement après avoir cliqué sur le boutonbouton plus de phpMyAdmin pour le faire apparaître) :
Dupliquer un site - importer les tables
Dupliquer un site – importer les tables

Sélectionner le fichier d’export SQL réalisé depuis le site de production :

Dupliquer un site - sélectionner le fichier d'export SQL
Dupliquer un site – sélectionner le fichier d’export SQL

Nota : pour ne pas révéler le préfixe utilisé pour mes tables de production, j’ai préféré modifier le préfixe des tables.

Dupliquer un site - tables ajoutées par import
Dupliquer un site – tables ajoutées par import
Haut de page

Modifier le contenu des tables

Il faut désormais remplacer, dans la Base des Données, les liens pointant vers le site de production par des liens pointant vers le site local. Par exemple, les adresses des images insérées dans les articles doivent désormais pointer vers les fichiers copiés en local. Pour cela, nous allons exécuter un script SQL.

Utiliser un script paramétré

Le script ci-dessous permet de remplacer l’adresse web (url) de l’ancien site par l’adresse web du nouveau site dans les tables standard de WordPress :

SET @ancien = CONVERT ('https://cabesthotes.fr' USING utf8);
SET @nouveau = CONVERT ('http://demo' USING utf8);
SET @prefixetable = CONVERT ('wpdemo_' USING utf8);

SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "options SET `option_value` = REPLACE(`option_value`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;

SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "posts SET `guid` = REPLACE(`guid`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;


SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "posts SET `post_content` = REPLACE(`post_content`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;


SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "comments SET `comment_author_url` = REPLACE(`comment_author_url`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;


SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "comments SET `comment_content` = REPLACE(`comment_content`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;


SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "links SET `link_url` = REPLACE(`link_url`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;


SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "postmeta SET `meta_value` = REPLACE(`meta_value`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;


SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "usermeta SET `meta_value` = REPLACE(`meta_value`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;


SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "commentmeta SET `meta_value` = REPLACE(`meta_value`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;


SET @stmt = CONVERT (CONCAT("UPDATE ", @prefixetable, "termmeta SET `meta_value` = REPLACE(`meta_value`, @ancien, @nouveau)") USING utf8);
PREPARE cmdsql FROM @stmt;
EXECUTE cmdsql;
DEALLOCATE PREPARE cmdsql;

Récupérer le script en téléchargeant le fichier

  • Cliquer sur le nom du fichier situé en bas du script

    Cliquer sur le nom du fichier script se trouvant en bas de la fenêtre affichant le script
    Télécharger le script
  • ouvrir le fichier (la procédure exacte dépend de votre navigateur) dans un éditeur de texte comme Notepad++ (attention : pas un traitement de texte comme « Word » ou « Office ») :

Une fenêtre apparaît proosant d'ouvrir ou enregistrer le fichier script

  • dans l’éditeur, sélectionner l’ensemble du texte du script (touches « CTRL + A » ou « Sélectionner tout » du menu contextuel) copier la totalité du script dans le presse-papier ( « CTRL + C » ou « Copier » dans le menu contextuel) :

    Dans l'éditeur tout sélectionner et copier
    Sélectionner tout le script (CTRL+A) et copier (CTRL+C)

Exécuter le script dans phpMyAdmin

Se connecter à phpMyAdmin :

  1. sélectionner la base de données du site WordPress,
  2. cliquer sur l’index
  3. coller le script ( « CTRL +  V »),
  4. définir les paramètres :
    @ancien : l’adresse web du site à dupliquer (exemple : https://cabesthotes.fr),
    @nouveau : adresse web (hôte virtuel) de la copie du site dans WampServer (exemple : http://demo)
    @prefixetable : le préfixe des tables locales (exemple : wpdemo),
  5. cliquer sur le bouton
Dans la page de saisie "SQL" copier le script, modifier les 3 paramètre en début de script et lancer l'excution
Paramétrer et exécuter le script

Modifier le contenu d’un script modèle

Une autre solution pour mettre à jour les adresses web dans la Base de Données consiste à éditer un script modèle et modifier son contenu dans un éditeur de texte.

À partir du script ci-dessous :

UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, 'www.oldhost.com', 'www.newhost.com');
UPDATE `wp_posts` SET `guid` = REPLACE(`guid`, 'www.oldhost.com', 'www.newhost.com');
UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, 'www.oldhost.com', 'www.newhost.com');
UPDATE `wp_comments` SET `comment_author_url` = REPLACE(`comment_author_url`, 'www.oldhost.com', 'www.newhost.com');
UPDATE `wp_comments` SET `comment_content` = REPLACE(`comment_content`, 'www.oldhost.com', 'www.newhost.com');
UPDATE `wp_links` SET `link_url` = REPLACE(`link_url`,'www.oldhost.com', 'www.newhost.com');
UPDATE `wp_postmeta` SET `meta_value` = REPLACE(`meta_value`, 'www.oldhost.com', 'www.newhost.com');
UPDATE `wp_usermeta` SET `meta_value` = REPLACE(`meta_value`, 'www.oldhost.com', 'www.newhost.com');
UPDATE `wp_commentmeta` SET `meta_value` = REPLACE(`meta_value`, 'www.oldhost.com', 'www.newhost.com');
UPDATE `wp_termmeta` SET `meta_value` = REPLACE(`meta_value`, 'www.oldhost.com', 'www.newhost.com');
Requêtes SQL pour mettre à jour une BDD WordPress
  1. sélectionner tout le texte du script avec la souris,

    Sélectionner tout le textedu script modèle présenté ci-dessus
    Sélectionner tout le texte du script
  2. Copier le texte dans le presse papiers ( « CTRL+C »),
  3. le coller dans un éditeur de texte comme Notepad++ (attention : pas un traitement de texte comme « Word » ou « Office »),
  4. utiliser la fonction de remplacement pour modifier les chaînes de caractères correspondant à :
    – l’adresse du site de production,
    – l’adresse du site local,
    – au préfixe de table :
    par exemple :
    – « www.oldhost.com » => « https://cabesthotes.fr »
    – « www.newhost.com » => « http://demo »
    – « wp_ » => « wpdemo_ »

    Utiliser la fonction "Remplacer" de l'éditeur de texte
    Remplacer les trois valeurs
  5. sélectionner tout le script (« CTRL+A) et copier dans le presse-papiers (« CTRL+C ») :
  6. coller le texte du script dans phpMyAdmin
    – sélectionner la Base de Données
    – cliquer sur l’onglet,
    – coller le texte du script (« CTRL+V »)
    – cliquer sur le bouton :

    Page d'exécution du script avec les modifications décrites ci-dessus
    Coller et exécuter le script
Haut de page

Vérifier qu’il n’y a plus d’ancienne référence dans la BdD

Dans phpMyAdmin, rechercher l’adresse du site de production dans toutes les tables du site, y compris dans les tables créées par des extensions :

Dans phpMyAdmin :

  1. sélectionner la Base de Données ,
  2. cliquer sur l’index ,
  3. saisir l’adresse web à rechercher
    dans notre exemple, nous saisissons uniquement le nom de domaine ce qui nous permet de retrouver les adresses mail ainsi que des adresses « http » (et non https); cela n’est pas forcément nécessaire, mais peut permettre de décider de les modifier si c’est utile,
  4. sélectionner toutes les tables  ayant le même préfixe que les tables standard WordPress,
  5. cliquer sur le bouton
Formulaire de recherche de phpMyAdmin
Rechercher l’adresse web du site de production dans le site dupliqué

On obtient un résultat par table, avec la possibilité d’afficher le résultat des tables qui contiennent au moins une correspondance :

Affichage de la liste des tables sélectionnées avec le nombre de correspondances trouvées pour chque table et la possibiité d'afficher les champs correspondants
Résultat de la recherche SQL

Nous pouvons modifier, ou ne pas modifier, chaque champ qui contient une référence au site de production :

Différentes correspondances sont trouvées : le nom du thème, dans le nom d'un champ, dans un champ de données sérialisées
Exemple de correspondances trouvées

Dans l’exemple ci-dessus, aucune donnée n’est à modifier.

Attention aux données sérialisées : les données sérialisées indiquent la taille des variables. Par exemple, « s:11:″cabesthotes″ » définit une chaîne de 11 caractères (« s » pour « string »). Si on remplace le contenu de la chaîne (ici « cabesthotes ») par une chaîne de taille différente, le contenu du champ deviendra illisible. Il faut donc aussi changer la taille, par exemple : « s:6:″wpdemo″ ».

Haut de page

Modifier  wp-config.php

Le fichier  « wp-config.php »  du site local, est une copie du fichier  « wp-config.php »  du site distant. Autrement dit, il contient les informations de connexion à la Base de Données du site de production qu’il faut remplacer par les données du site sur WampServer :

// ** Réglages MySQL - Votre hébergeur doit vous fournir ces informations. ** //
/** Nom de la base de données de WordPress. */
define('DB_NAME', 'demo');
/** 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', '');
/** Adresse de l'hébergement MySQL. */
define('DB_HOST', 'localhost');
Dupliquer un site WordPress - mettre à jour les paramètres de BdD dans wp-config.php

Il faut aussi vérifier d’autres paramètres, comme le forçage éventuel de l’administration en SSL, qui peut ne pas fonctionner pour le site local :

/*	Forcer l'accès admin en SSL (https)
*/
 define('FORCE_SSL_ADMIN', false);
Dupliquer un site WordPress - ne pas forcer en SSL

Modifier .htaccess

Vérifier qu’il n’y a pas de référence à l’adresse du site de production dans le fichier « .htaccess » local.

Modifier les permaliens

Si WordPress ne trouve pas les articles, il faut régénérer les permaliens.
Pour se faire il faut :

  1. se connecter avec un compte administrateur,
  2. cliquer sur le sous-menu « Permaliens » du menu « Réglages »,

    Affichage du sous-men "Permaliens" dans l'administration
    Atteindre le réglage des permaliens
  3. choisir un réglage de permaliens,
  4. cliquer sur   Enregistrer les modifications   (il n’est pas nécessaire de modifier le réglage, demander uniquement l’enregistrement est suffisant pour que WordPress régénère les permaliens) :

    Cliquer sur un bouton radio puis sur le bouton "Enregistrer la modification"
    Sélectionner un permalien et enregistrer

Dans le cas d’un serveur Apache, le fichier   « .htaccess »  doit contenir les instructions suivantes :

Dupliquer un site - gestion des permaliens dans htaccess
Dupliquer un site – gestion des permaliens dans .htaccess
Haut de page

 

 

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *