Wordpress > Ghost

Ce tutoriel ne traite pas de l'installation d'un blog Ghost, uniquement de l'importation de vos articles et de vos images depuis WordPress. Pour importer vos commentaires, vous pouvez consulter l'article Isso

Il existe déjà de nombreux tutoriels qui traitent de la migration d'un blog Wordpress vers un blog Ghost, la tendance actuelle oblige.

Tous ou presque utilisent le plugin wp développé par l'équipe de Ghost, baptisé tout simplement Ghost. Son utilisation est des plus simple, installez le plugin et rendez-vous depuis votre panel admin sur l'onglet Outils > Export to Ghost, puis exportez

Le dit plugin va exporter les articles wordpress au format .json, en prenant soin de les adapter pour Ghost. Il ne vous reste plus qu'à importer le tout dans ghost depuis l'onglet labs. Seulement cette solution n'a pas fonctionné pour moi (erreur inconnue lors de l'import).

Fort heureusement il existe une alternative pour adapter une db WP à Ghost, le convertisseur de script wp2ghost de @Jonhoo.

wp2ghost

Ce programme vous permet de convertir un fichier d'export WP .xml en un fichier .json formaté pour Ghost. Exactement donc comme le plugin WP édité par l'équipe Ghost, seulement cette fois-ci l'import semble fonctionner (pour moi). Peut-être une histoire de mise à jour.

Tout d'abord téléchargez l'utilitaire wp2ghost et installez-le grâce à npm, le gestionnaire de paquets de Node.js que vous possédez surement déjà, puisqu'il est nécessaire à l'installation de Ghost.

git clone https://github.com/jonhoo/wp2ghost.git wp2ghost

Rentrez dans le répertoire wp2ghost et installez-le

cd wp2ghost && npm install

Parfait. Retournez maintenant sur le panel admin de WordPress et exportez vos articles via l'onglet Outils > Exporter. Sélectionnez uniquement les articles, pour les commentaires je vous invite à lire mon article sur Isso, un serveur de commentaires auto-hébergé.

node bin/wp2ghost.js domaintld.wordpress.xxxx-xx-xx.xml > ghost.json

Migrer les images

Toutes les solutions trouvées sur internet recourent à Cloudinary via son plugin WP. Le plugin même de Ghost vous le recommandent. Si vous optez pour cette solution, vos images seront alors hébergées sur un cloud au lieu de votre blog WP, le plugin Cloudinary se chargeant de mettre à jour votre db WP. Ainsi à l'export de votre db vers Ghost, les liens de vos images pointeront sur cloudinary, non plus votre blog WP.

Cette alternative ne me convient pas du fait que je préfère héberger mes images sur mon propre serveur et ne pas recourir à un service tiers. Fort heureusement j'ai trouvé une alternative on ne peut plus simple.

Exporter les images

À l'upload d'images l'arborescence des images est similaire entre WordPress et Ghost, tous deux vont organiser les images par année et par mois. Ainsi si vous uploadez l'image nommée image.png le 14 septembre 2015, celle-ci se retrouvera dans le dossier /2015/09/image.png.

Ainsi dans votre article l'url de l'image sera http://domain.tld/wp-content/uploads/2015/09/image.png pour wordpress (lien direct) et /content/images/2015/09/image.png pour ghost (lien relatif).

Maintenant que nous savons ça, il est évident que migrer ses images sera facile.
La première chose à faire est donc de copier les différents répertoires d'uploads de Wordpress dans votre installation Ghost.

Contentez-vous de copier l'ensemble des répertoires contenus dans /wp-content/uploads/ vers /content/images/ avec la méthode qui vous convient le mieux, en utilisant la commande cp ou tout simplement un logiciel de ftp avec le glisser-déposer. C'est vous qui voyez.

Éditer la base de données

Il va vous falloir mettre à jour dans la table posts deux colonnes : markdownet html, cette dernière étant le rendu de la première (ce que voit l'internaute).

Dans mon cas je dois changer l'url d'origine http://domain.tld/wp-content/uploads/ par un lien relatif /content/images/

Avant d'éditer votre DB, arrêtez votre blog et faites un backup de celle-ci. Rendez-vous dans le répertoire où se trouver votre DB et tapez

cp ghost.db ghostDUMP.db

Ouvrez une console sqlite en indiquant la db de ghost

sqlite3 ghost.db

Dans la console sqlite, exécutez les requêtes suivantes en les adaptant à vos besoins

update posts set markdown = replace(markdown, 'http://domain.tld/wp-content/uploads/', '/content/images/') where markdown like '%http://domain.tld/wp-content/uploads/%';
update posts set html = replace(html, 'http://domain.tld/wp-content/uploads/', '/content/images/') where html like '%http://domain.tld/wp-content/uploads/%';

Attention! Songez que les liens directs sur vos articles depuis vos images ou les attachments ne seront pas édités de cette manière. À vous de réadapter et d'exécuter les requêtes SQL ci-dessus autant de fois qu'il le faudra pour mettre à jour votre DB. Si vous voulez scruter votre DB vous pouvez recourir à un explorateur de DB sqlite tel SqliteBrowser (osx).

Relancez votre blog (Supervisord?) et rendez-vous à l'adresse http://domain.tld/ghost/debug et importez votre db fraîchement éditée. Voilà, vous avez importez votre db et toutes les images. 💩