← Terug naar blog

Conversietools van WordPress naar Hugo

Hugo-logo

WordPress-content naar Hugo omzetten klinkt eenvoudig, maar in de praktijk hangt veel af van de kwaliteit van de conversietool. Ik testte meerdere tools. Sommige zijn specifiek voor Hugo gemaakt, andere leveren vooral Markdown op dat daarna nog aangepast moet worden.

Geteste tools:

  1. Wordpress To Hugo Exporter
  2. WP2md
  3. ExitWP for Jekyll
  4. ExitWP for Hugo, mijn eigen aangepaste conversietool

De geteste conversietools

Mijn blog bevat content vanaf 2006. Een deel daarvan is ooit in Drupal geschreven, later naar WordPress geconverteerd en daarna naar Hugo verhuisd. Daardoor is mijn WordPress-export waarschijnlijk complexer dan een gemiddelde site. Met 289 posts en pagina’s was handmatig omzetten geen optie. Daarom heb ik uiteindelijk tijd gestoken in een eigen conversietool.

WordPress To Hugo Exporter

Installatie van de plugin:

  1. Download de plugin als zipbestand via GitHub.
  2. Maak de map wordpress-to-hugo-exporter aan in de WordPress plugin directory.
  3. Pak de zip daar uit en zet ownership en rechten goed.
  4. Controleer dat extension=zip.so actief is in php.ini.
  5. Activeer de plugin in het WordPress dashboard.
  6. Kies in WordPress Tools -> Export to Hugo en download de export-zip.

Resultaat

De export-zip is eenvoudig te gebruiken en bevat de directorystructuur die Hugo nodig heeft. De output lijkt visueel behoorlijk op de oorspronkelijke WordPress-site.

Wat ik minder goed vond: er staat veel HTML in de Markdown-bestanden. Als dat geen probleem is, is dit een bruikbare tool. Als je schone Markdown wilt, moet je verder kijken.

WP2md

WP2md is een Python-tool. Het is geen WordPress-naar-Hugo converter, maar zet WordPress-export om naar Markdown.

Installatie:

$ pip install git+https://github.com/dreikanter/wp2md

Gebruik:

  1. Exporteer in WordPress via Tools -> Export de XML met alle content.
  2. Draai de conversie:
$ mkdir ~/wp2md
$ wp2md -d ~/wp2md wordpress-export.xml

Resultaat

De Markdown is vrij schoon, met weinig HTML. De YAML/TOML header is alleen niet direct geschikt voor Hugo. Ik zag ook ontbrekende bullet lists en paragrafen. De code van de tool is wel netjes en een goede basis om zelf op voort te bouwen.

ExitWP for Jekyll

ExitWP for Jekyll is gemaakt voor Jekyll. Omdat Jekyll en Hugo andere frontmatter gebruiken, moet je de output aanpassen.

Basisstappen:

$ cd ~
$ unzip exitwp-master.zip
$ mv exitwp-master exitwp-for-jekyll
$ cd exitwp-for-jekyll
$ python exitwp.py

Daarna kun je Jekyll-specifieke headers verwijderen en bestanden hernoemen:

$ perl -i.BAK -ne "print unless /^(author|comments|layout|wordpress_id): /" *.markdown
$ rename 's/\.markdown$/\.md/' *.markdown

Resultaat

Met wat extra bewerkingen is de output bruikbaar voor Hugo. De Markdown is vrij schoon, maar niet perfect. Bullet lists krijgen soms extra witregels en in pre-blocks blijven bepaalde Markdown-markeringen letterlijk zichtbaar. Het resultaat kwam wel dicht bij wat ik wilde, dus ik heb deze tool als basis gebruikt.

Eindoplossing: ExitWP for Hugo

ExitWP for Hugo is mijn aangepaste variant van ExitWP. De tool genereert Hugo-vriendelijkere Markdown.

Gebruik:

$ cd ~
$ unzip exitwp-for-hugo-master.zip
$ mv exitwp-for-hugo-master exitwp-for-hugo
$ cd exitwp-for-hugo
$ python exitwp.py

Daarna kun je .markdown bestanden hernoemen naar .md:

$ rename 's/\.markdown$/\.md/' *.markdown

Resultaat

Deze tool is niet perfect, maar was voor mij de beste oplossing. De Markdown-bestanden zijn schoon en bevatten weinig HTML. Tabellen blijven nog HTML, maar dat vond ik acceptabel.

Met sed kun je daarna nog gerichte correcties doen. Maak wel altijd een backup voordat je zulke commando’s op veel bestanden tegelijk uitvoert:

$ sed 's/^    # /    $ /' *.md

Editors zoals Notepad++ kunnen daarna ook handig zijn voor zoek-en-vervang acties over meerdere bestanden.

Volgende artikelen in deze Hugo-serie:

  1. Why changing from WordPress to Hugo
  2. Conversietools van WordPress naar Hugo
  3. Migreren van WordPress naar Hugo