Wordpress est un système formidable simplifiant la vie de milliers (millions) de webmestres. Une chose cependant mériterait d’être améliorée, et pour une raison que j’ignore cela n’a pas l’air de faire partie des priorités des dévélopeurs, c’est la modification de l’url d’un site tournant sous Wordpress.

La méthode officielle

La première méthode, qui est celle que la plupart d’entre nous utilise, est de suivre les consignes expliquées sur le site officiel de Wordpress.

C’est la méthode que j’utilise depuis des années, et ce n’est pas vraiment une bonne idée… En résumé, voici ce que le site officiel de Wordpress vous suggère de faire:

  • modifier la valeur du champ “Adresse web de WordPress (URL)”
  • modifier la valeur du champ “Adresse web du site (URL)”

Comment modifier la valeur de ces deux champs?

Modification des paramètres dans l’administration du site

Vous pouvez modifier ces deux paramètres via la page de réglages généraux (Réglages > Général):

Modification des paramètres via le fichier functions.php de votre thème

Ajoutez les deux lignes suivantes au début du fichier functions.php de votre thème (wp-content/themes/VOTRE_THEME/functions.php)

1
2
update_option('siteurl','http://exemple.com');
update_option('home','http://exemple.com');

La modification de ces deux paramètres implique que vous ne pourrez plus accès à votre site via l’ancienne url. Soyez donc sûr que c’est la dernière opération que vous effectuez via l’ancienne url et que votre site est accessible à partir de sa nouvelle url.

Maintenant que vous avez modifié les paramètres d’url du site, vous devez vous attaquer au contenu du site. Les liens créés par Wordpress sont des urls absolues, donc si votre site est hébergé à l’adresse http://www.exemple.com, tous les liens de votre sites commenceront par cette url http://www.exemple.com/.
Quand je dis tous les liens, cela inclue les liens vers les images insérées dans les articles et les pages, les liens des entrées dans le menu, ainsi que par exemple les options de votre thème (par exemple si votre thème offre la possibilité d’ajouter un logo dans l’en-tête de votre site).

Le fait de modifier les deux paramètres cités plus haut ne suffit pas. Tous les liens de votre site doivent également être modifiés avec la nouvelle url.
Une solution, proposée par le site officiel de Wordpress, est de faire un export de votre base de données avec PHPMyAdmin par exemple et d’effectuer un “chercher et remplacer” (“search and replace”) et de vérifier manuellement toutes les occurences pour savoir si la modification peut être effectuée ou non… Bonne chance si vous avez un site un tant soit peu conséquent! (vous noterez au passage l’utilisation de cette magnifique expression… “Un tant soit peu”…)

Je trouve que c’est une mauvaise solution car elle ne règle pas tous les problèmes, loin de là même! Wordpress est destiné avant tout à un public dont le niveau de technicité est des plus réduits (encore une belle tournure de phrase vous remarquerez….), alors demander aux utilisateurs de faire un export d’une base de données et d’en modifier le contenu, c’est foutu d’avance !
De plus, si vous jetez un coup d’oeil dans la table des options de Wordpress (wp_options par défaut mais j’espère pour vous que vous avez modifié le préfixe des tables lors de l’installation hmmm?), vous remarquerez que de nombreuses options sont sérialisées avant d’être sauvées dans la table, ce qui rend toute modification manuelle extrêmement compliquée.
Voici un exemple d’option à modifier:

1
a:47:{s:9:"threshold";d:2;s:5:"limit";i:4;s:14:"excerpt_length";i:10;s:6:"recent";b:0;s:12:"before_title";s:4:"<li>";s:11:"after_title";s:5:"</li>";s:11:"before_post";s:8:" <small>";s:10:"after_post";s:8:"</small>";s:14:"before_related";s:27:"<h3>Related posts:</h3><ol>";s:13:"after_related";s:5:"</ol>";s:10:"no_results";s:24:"<p>No related posts.</p>";s:5:"order";s:10:"score DESC";s:9:"rss_limit";i:3;s:18:"rss_excerpt_length";i:10;s:16:"rss_before_title";s:4:"<li>";s:15:"rss_after_title";s:5:"</li>";s:15:"rss_before_post";s:8:" <small>";s:14:"rss_after_post";s:8:"</small>";s:18:"rss_before_related";s:27:"<h3>Related posts:</h3><ol>";s:17:"rss_after_related";s:5:"</ol>";s:14:"rss_no_results";s:24:"<p>No related posts.</p>";s:9:"rss_order";s:10:"score DESC";s:9:"past_only";b:0;s:12:"show_excerpt";b:0;s:16:"rss_show_excerpt";b:0;s:8:"template";b:0;s:12:"rss_template";b:0;s:14:"show_pass_post";b:0;s:12:"cross_relate";b:0;s:11:"rss_display";b:0;s:19:"rss_excerpt_display";b:1;s:13:"promote_yarpp";b:0;s:17:"rss_promote_yarpp";b:0;s:15:"myisam_override";b:0;s:7:"exclude";s:0:"";s:6:"weight";a:1:{s:3:"tax";a:2:{s:8:"category";i:1;s:8:"post_tag";i:1;}}s:11:"require_tax";a:0:{}s:5:"optin";b:0;s:18:"thumbnails_heading";s:14:"Related posts:";s:18:"thumbnails_default";s:97:"http://localhost/wordpress/wp-content/plugins/yet-another-related-posts-plugin/images/default.png";s:22:"rss_thumbnails_heading";s:14:"Related posts:";s:22:"rss_thumbnails_default";s:97:"http://localhost/wordpress/wp-content/plugins/yet-another-related-posts-plugin/images/default.png";s:12:"display_code";b:0;s:20:"auto_display_archive";b:0;s:23:"auto_display_post_types";a:1:{i:0;s:4:"post";}s:5:"pools";a:0:{}s:25:"manually_using_thumbnails";b:0;}

Alors? J’imagine que vous en êtes toujours à chercher l’url dans cette horrible chaîne de caractères? Allez, je vais vous aider:

1
s:97:"http://localhost/wordpress/wp-content/plugins/yet-another-related-posts-plugin/images/default.png"

Bon, maintenant que vous l’avez, vous allez me la modifier correctement, histoire qu’elle fonctionne encore après le transfert du site vers sa nouvelle url (pour info le 97 qui précède la string est le nombre de caractères de la chaîne de caractères qui suit, n’oubliez pas de le modifier en conséquence!):

1
s:103:"http://www.exemple.com/wordpress/wp-content/plugins/yet-another-related-posts-plugin/images/default.png"

Voilà en gros ce que Wordpress vous suggère de faire si vous désirez modifier l’url de votre site. Un “Chercher et remplacer” en mettant à jour à chaque fois que c’est nécessaire les informations liées à la chaîne de caractères modifiée. Genre on a rien de plus intéressant à faire quand on met un site en production…

Bien évidemment il existe une meilleure solution, moins fastidieuse et moins sujette à erreur… Je vous laisse la découvrir ci-dessous.

La méthode Duplicator

Duplicator est une extension gratuite pour Wordpress et qui permet de dupliquer, déplacer ou faire une sauvegarde d’un site internet.

Le cas qui nous intéresse ici est le transfert d’un site vers une nouvelle url. Comment cela fonctionne-t-il? Duplicator va exporter votre base de données, vous permettre d’en modifier le contenu et ensuite de le réimporter dans une autre base de données.

Je vous propose ma propre recette, en espérant qu’elle vous soit utile… Personnellement je n’utilise pas toutes les options, mais la méthode que j’utilise fonctionne bien, je l’ai utilisée plusieurs fois et n’ai pas encore rencontré de problème particulier.

Situons d’abord le contexte pour bien comprendre la suite…
Je développe un site internet en local en utilisant une url qui pointe vers localhost. L’url qui sera utilisée pour le site en production sera différente (d’où l’intérêt de l’article que vous êtes en train de lire…)
Sur ma machine de développement, j’utilise une base de données pour mon site de développement. Je crée également une second base de données que je laisse vide car je n’en ai pas besoin pour l’instant. Elle sera utilisée pour le transfert.

Paramètres de mon site local:

  • Url: http://ljoshka-fischer-consulting.buzzwoo.de
  • Répertoire: /var/www/joshka-fischer-consulting/
  • Nom de la base de données utilisée pour le transfert du site: jfc

Paramètres du site en production:

  • Url: http://joshka-fischer-consulting.staging.buzzwoo.de
  • Répertoire: /var/www/vhost/joshka-fischer-consulting/httpdoc/

Maintenant que vous avez une idée du contexte, voici les différentes étapes à réaliser pour effectuer un transfert de site tournant sous Wordpress dans les règles de l’art:

  1. Rendez vous dans l’administration de votre site, dans la section Duplicator.
    écran d'accueil de l'extension Duplicator

  2. Cliquez sur Create Newet sélectionnez les options qui vous intéressent. Dans notre cas, nous ne désirons pas effectuer de sauvegarde des fichiers, donc on active le filtre sur les fichiers et on ajoute le chemin d’accès du répertoire racine de notre site (vous pouvez cliquer sur le lien Root Path en haut à droite pour l’ajouter automatiquement); ceci aura pour effet d’exclure tous les fichiers et répertoires présents dans le répertoire indiqué, à savoir, tout :)
    Dans la partie inférieure de la page, indiquez les informations pour accéder à votre seconde base de données (celle qui est vide et n’est utilisée que pour le transfert)
    Indiquez également la nouvelle url de votre site (celle que vous utiliserez après le transfert).
    paramètres pour l'export

  3. L’écran suivant vous indique si des erreurs doivent être corrigées résumé des erreurs

  4. Cliquez ensuite sur les deux liens pour télécharger l’installateur et l’archive. télécharger l'installateur et l'archive

  5. Copiez les deux fichiers (installateur et archive) dans un répertoire temporaire au sein de votre site actuel (moi par exemple je les copie dans un nouveau répertoire /var/www/joshka-fischer-consulting/tmp/)

  6. Affichez l’installateur depuis votre navigateur en utilisant votre url locale (dans mon cas http://ljoshka-fischer-consulting.buzzwoo.de/tmp/installer.php)
    Complétez les informations pour accéder à la seconde base de données (vous savez, celle qui n’est pas utilisée…) et cliquez sur Test Connection pour être sûr que les paramètres de connexion sont corrects. Installateur Duplicator

  7. On coche la petite case en bas de page Run Deployment et on confirme l’exécution du bidule… Confirmation du déploiement

  8. Indiquez l’ancienne url et la nouvelle url du site; faites de même avec le répertoire où sont situés les fichiers de votre site.
    Cliquez sur le lien Advanced Options pour afficher des champs supplémentaires (Site Url, Keep Post GUID unchanged et Rnqble Full Search (very slow)) et complétez-les comme il se doit. Options du déploiement

  9. Cliquez sur Run Update et croisez les doigts… Normalement, tout devrait bien se dérouler et vous devriez voir un écran similaire.
    Résultat du déploiement

  10. Il ne vous reste plus qu’à exporter le contenu de la base de données jfc avec PHPMyAdmin par exemple et à l’importer dans la base de données de votre site de destination.

Quelques nouvelles

Bien…. Ca fait plus de 5 mois que je n’ai plus rien posté sur ce blog, la honte! Pourtant les idées se bousculent au portillon…## Ce qu …… Continuer la lecture