Python Script for migrating from Wordpress to Hugo
Here’s a simple script that I wrote in python for helping to migrate from a wordpress blog to a static hugo site.
- It uses the jinja, slugify, and mysql.connector libraries.
- It connects directly to the Wordpress database and extracts the compiled HTML from Wordpress
- For simplicity, it does not handle tags
from dataclasses import dataclass
from datetime import datetime
import mysql.connector
from jinja2 import Template
from slugify import slugify
@dataclass
class Post:
date:datetime
title:str
content:str
filename:str
posts = []
try:
conn = mysql.connector.connect(
host='localhost',
port=3306,
database='wordpress',
user='wp_admin',
password='$YOUR_DB_PASSWORD'
)
cursor = conn.cursor()
query = """
select post_date, post_title, post_content from $YOUR_POSTS_TABLE
where post_type = 'post'
order by post_date
"""
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
posts.append(Post(row[0], row[1], row[2], slugify(row[1])))
template = Template("""+++
title = "{{title}}"
date = {{date}}
draft = false
tags = ['']
+++
{{content}}
""")
for post in posts:
path = f"import/{post.date.year}-{post.filename}.md"
with open(path, "w") as f:
f.write(
template.render(
title=post.title,
date=post.date.strftime('%Y-%m-%dT%H:%M:%S%z'),
content=post.content
)
)
print([post.filename for post in posts])
except mysql.connector.Error as e:
print(e)
finally:
cursor.close()
conn.close()
Thank you for reading! Share your thoughts with me on bluesky, mastodon, or via email.
Check out some more stuff to read down below.
Most popular posts this month
- 2024
- Reinstalling Windows at 1am
- SQLite DB Migrations with PRAGMA user_version
- My Custom Miniflux CSS Theme
- How to Disable Wayland in Debian Testing
Recent Favorite Blog Posts
This is a collection of the last 8 posts that I bookmarked.
- 21st Century C++ from Communications of the ACM
- Submarines DevCon 2025 Keynote Speech from JoshHaines.com
- How I Use AI: Meet My Promptly Hired Model Intern from Armin Ronacher's Thoughts and Writings
- DeepSeek from Maggie Appleton
- Digital Reality Digital Shock from Christopher Butler
- 10 habits to help becoming a Debian Maintainer from Optimized by Otto
- Tiny corners from Manuel Moreale RSS Feed
- Build It Yourself from Armin Ronacher's Thoughts and Writings
Articles from blogs I follow around the net
Pluralistic: America and "national capitalism" (18 Feb 2025)
Today's links America and "national capitalism": How the EU should respond to Trumpism. Hey look at this: Delights to delectate. Object permanence: 2005, 2010, 2015 Upcoming appearances: Where to find me. Recent appearances: Where I've bee…
via Pluralistic: Daily links from Cory Doctorow February 18, 2025My Life in Weeks by Gina Trapani
OMG. Life perspective through UI. I freaking love it. Check out My Life in Weeks by Gina Trapani
via Blog – Brad Frost February 18, 2025Argentinian president Javier Milei promotes memecoin that then crashes 95% in apparent $100 million+ rug pull
A tweet from Argentina's president Javier Milei promoted a memecoin called Libra, which he described as a "private project [that] will [be] dedicated to encouraging the growth of the Argentine economy by funding small Argenti…
via Web3 is Going Just Great February 18, 2025Generated by openring