Cloner un site WordPress sur la même base de données

Après avoir passé un bon moment à rechercher la méthode pour cloner un blog WordPress afin d'aider un membre d'un forum que je fréquente, j'ai trouvé la solution et j'en remercie son auteur, Julien : http://blog.notionweb.com/changer-le-prefixe-des-tables-de-wordpress/

Le problème consistait à cloner le blog sur le même serveur en utilisant la même base de données, le pack d'hébergement n'offrant qu'une seule base, obligeant donc à changer le préfixe des tables.

Lorsque l'on clone un blog WP pour le placer sur un autre serveur et/ou une autre base de données, la méthode est relativement simple : il faut modifier dans le fichier "wp-config.php" les caractéristiques de la base de données, sans toucher au préfixe des tables ("wp_" par défaut), puis modifier dans un fichier de sauvegarde des tables du site initial (sauvegarde de la structure et des données) l'URL des deux clés "home" et "siteurl" de la table "wp_options". Il peut aussi être nécessaire de changer le chemin d'accès au dossier du site, voire des URL enregistrées en dur avec celle du site initial.
Le plus simple est de le faire avec un éditeur type notepad++ sur une sauvegarde des tables du site initial, en faisant un remplacement global. Une fois ces instructions SQL importées dans la nouvelle base de données, le nouveau site doit immédiatement être fonctionnel.

Malheureusement, dans le cas qui nous intéresse où le préfixe des tables a dû être modifié pour isoler le nouveau site, WordPress a un gros inconvénient : il utilise les noms précis de certaines tables dans des données stockées dans d'autres tables. Si la modification n'a pas été faite à leur niveau, WP cherche en partie dans les anciennes tables et, si le site fonctionne souvent correctement, le message "Vous n’avez pas les droits suffisants pour accéder à cette page" s'affiche lorsqu'on tente de s'identifier.

Pour régler ce problème, il faut donc aussi suivre les instructions données par Julien sur son blog, ce que j'ai bien évidemment fait. Mon clone fonctionne maintenant correctement et sans mélange avec l'original.

Voici donc comment j'ai procédé :

  • copie du contenu du dossier du site initial dans un nouveau dossier correspondant au nouveau domaine (ou sous-domaine )
  • modification du fichier wp-config.php du nouveau site : préfixe changé en "xz_" (ligne 79 en version 3.4.2)
  • modifications des diverses clés définies dans ce même fichier lignes 52 à 59, pour les différencier de celles du site d'origine
  • sauvegarde dans un fichier texte des tables à préfixe "wp_" du site initial
  • modification (dans notepad++) de ce fichier par
    • remplacement du préfixe des tables de "wp_" en "xz_",
    • changement de l'URL dans la table "xz_options", champs "home" et "siteurl",
    • changement du chemin physique du site (utilisé apparemment par certains plugins)
  • import de ce code sql modifié dans la base de données (la même que celle du site original)
  • application des consignes de Julien

Je cite ci-dessous mon adaptation de ces consignes sur une version 3.4.2 en utilisant mon préfixe "xz_" :

  • table "xz_usermeta" : pour les attributs "meta_key" ayant pour valeur "wp_user_level", "wp_capabilities", "wp_users-ettings" et "wp_user-settings-time", modification du préfixe en xz. Je l'ai également fait pour les valeurs "wp_dashboard_quick_press_last_post_id" en "xz_dashboard_quick_press_last_post_id 3", et "dismissed_wp_pointers" en "dismissed_xz_pointers", mais je ne suis pas certain que ce soit à faire : fonctionnement à vérifier donc avec et sans...
  • table "xz_options" : modification de l’attribut "option_name" dont la valeur est "wp_user_roles" en "xz_user_roles".