WordPress to Hugo Static site migrator
![Build Go](https://github.com/ashishb/wp2hugo/actions/workflows/build-go.yaml/badge.svg)
![Validate Go code formatting](https://github.com/ashishb/wp2hugo/actions/workflows/format-go.yaml/badge.svg)
This is the best migrator for migrating WordPress export to Hugo.
It handles several weird edge cases that I encountered while trying to migrate my personal website to Hugo-based site.
Commercial usage
I want this project to be as widely accessible as possible, while still funding the development costs.
This project is completely free for non-commercial and personal usage.
Commercial usage is restricted via a license.
Feel free to contact me if you want to license this commercially
Usage
Binary
- Download the
wp2hugo
tool from releases
- Export your WordPress website via
Tools -> Export
in your admin dashboard
- Let's say the downloaded file is
wordpress-export.xml
generate the website using $ wp2hugo --source wordpress-export.xml --download-media
Now, run this
$ wp2hugo
Usage of wp2hugo:
-download-media
download media files embedded in the WordPress content
-font string
custom font for the output website (default "Lexend")
-media-cache-dir string
dir path to cache the downloaded media files (default "/tmp/wp2hugo-cache")
-output string
dir path to the write the Hugo generated data to (default "/tmp")
-source string
file path to the source WordPress XML file
Build from source
$ git clone git@github.com:ashishb/wp2hugo.git
$ cd wp2hugo/src/wp2hugo
$ make build_prod
# `./bin/wp2hugo` will contain the binary and you can use it as `$ ./bin/wp2hugo --source wordpress-export.xml --download-media`
Goals of wp2hugo
- [x] Migrate posts
- [x] Migrate pages
- [x] Migrate tags
- [x] Migrate categories
- [x] Migrate all the URL including media URLs correctly
- [x] Migrate iframe(s) like YouTube embeds
- [x] Migrate "Excerpt"
- [x] Migrate "catlist"
- [x] Set WordPress homepage correctly
- [x] Migrate RSS feed with existing UUIDs, so that entries appear the same - this is really important for anyone with a significant feed following, see more details of a failed migration
- [x] favicon.ico
- [x] YouTube embeds
- [x] Google Map embed via a custom short code
googlemaps
- [x] Migrate
caption
(WordPress) to figure
(Hugo)
- [x] Migrate "Show more..." of WordPress ->
Summary
in Hugo
- [x] Support for parallax blur (similar to WordPress Advanced Backgrounds)
- [x] Migrate WordPress table of content -> Hugo
- [x] Custom font - defaults to Lexend
- [x] Use draft date as a fallback date for draft posts
- [x] Maintain the draft status for draft and pending posts
- [x] Migrate code blocks correctly - migrate existing code class information if available
- [x] Download embedded photos while maintaining relative URLs
- [x] Map WordPress's
feed.xml
to Hugo's feed.xml
- [x] WordPress footnotes
- [ ] Featured images - I tried this WordPress plugin but featured images are simply not exported
Why existing tools don't work
- Jekyll Exporter always times out for me
- Various options can be seen here that are partially good.
- Export via
https://<website>/wp-admin/export.php
- The problem is that there is no good tool to perform a proper import into Hugo
Note:
- To migrate comments, use Remark42