Migration vers WordPress
Attention: cet article date du 26 janvier 2011
Ce qu'il contient est peut être encore valable...
... ou complètement obsolète!
Cela faisait un moment que je voulais me lancer, et que, d'ailleurs, j'avais plus ou moins planifié la chose. De ces petits projets que l'on repousse sans arrêt. Et bien, c'est fait, j'ai transformé mon blog RichardCarlier.com en version WordPress.
Rien de bien méchant, sauf qu'il fallait bien entendu préserver les contenus de ce blog, qui tourne depuis… 2003 !
Pourquoi cette migration ?
Non pas que le système ancien était mauvais. Preuve en est : c'est moi qui l'avait développé, en php/mysql (la toute première version était en xHtml, mais était très pénible à mettre à jour). Mais, si mon oeuvre finale était techniquement au point, avec les avantages du sur-mesure, il lui manquait une certaine souplesse dans l'évolution, les extensions, les templates, tout ça.
Ajoutons à cela, point non négligeable, qu'à mon catalogue de formateur j'enseigne WordPress depuis quelques temps. D'où la nécessité de me roder sur l'outil. Même si j'ai par ailleurs d'autres sites qui tournent depuis un moment avec WP, en particulier PasswordFinder.fr ou regalez-vous.net (et quelques autres plus personnels…)
Comment la migration ?
Préserver l'intégrité des données, c'est à dire au moment du transfert : 83 articles (dont certains non visibles), 33 commentaires, 18 catégories et 104 mots-clefs. Chiffres impressionnants pour un blog de 9 ans (je sais, je ne suis pas un gros posteur).
Bref, l'idée était de ne pas tout ressaisir, et d'éviter le copier/coller. Et l'inévitable loupé qui peut en résulter. D'où la création de quelques requêtes SQL intéressantes, pour transférer les contenus de mon ancien blog fait à la main en blog WordPress.
Ce qui nous donne, par exemple, pour la table articles devenue posts :
INSERT INTO wprc_posts (ID, post_author , post_date, post_date_gmt, post_modified, post_modified_gmt , post_title , post_status , comment_status , ping_status , post_name , guid , post_content , post_parent, menu_order, post_type, comment_count ) SELECT id AS ID, 1 as author , parution, parution, parution, parution , titre , if(visible='Y','publish','draft') as p , 'open' as c, 'open' as ps , REPLACE (apache, concat(SUBSTRING_INDEX( apache , '-', 1 ),'-'), '') as post_name , concat('https://richardcarlier.com/article-', apache , '.html') as guid , concat(chapo ,'<!--more-->', REPLACE (contenu, '/data/image/', '/wp-content/uploads/originales/')) as content , 0 as post_parent, 0 as menu_order , if(id='1','page','post') as posttype , 0 as comment_count FROM articles ;
Ouch.
Pas la pire de mes requêtes, mais il y en a quelques 120 lignes dans le même genre (car il faut traiter les articles, les commentaires, les mots clefs, les catégories, les relations entre tout ça…)
Certes, la requête en elle même n'a pas d'intérêt majeur, vu quelle ne peut coller qu'à la structure d'origine de mes tables. Mais cela peut être intéressant de la conserver pour mémoire (même si j'ai le fichier complet dans un coin), et la partager. Et pour montrer que, il ne faut pas l'oublier, WordPress est manipulable aussi en SQL dans certains cas. A éviter au maximum pour en conserver l'esprit, mais cela peut dépanner.
De nombreuses pirouettes ont été nécessaires pour certaines données, les champs personnalisés m'ont alors été d'un beau secours.
Et d'arriver à se dire que de nombreux sites et contenus peuvent migrer vers WordPress sans (à mon avis) trop de casse, pour peu que les structures de base soient pas trop mauvaises.
Conclusion de la migration
Globalement, pas de mauvaise surprise.
En toute modestie, mes tables étaient bien construites, et la transition n'a pas eu de soucis. Certes, certaines n'avaient pas les cases nécessaires (le slug
était absent de certaines, par exemple, ou des tables ont dû fusionner pour coller à la structure WordPress, entrainant des conflits de clefs…)
Au final, j'ai pu conserver l'intégralité des contenus, avec quasiment aucune ressaisie, tout en conservant les permaliens originels (ce qui est crucial pour le référencement).
Reste le problème du choix du thème et de la régularité des posts… mais ceci est une autre histoire !
Post Scriptum : Ce post est un brin technique, je m'en excuse...