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
- 2025
- My Custom Miniflux CSS Theme
- Setting up ANTLR4 on Windows
- 2024
- Convert Markdown to PDF in Sublime Text
Recent Favorite Blog Posts
This is a collection of the last 8 posts that I bookmarked.
- Fedora Magazine: Contribute to Fedora 44 KDE and GNOME Test Days from Fedora People
- Pluralistic: bunnie's piggyback hack (09 Jan 2026) from Pluralistic: Daily links from Cory Doctorow
- Clicks Communicator from Chris Hannah
- A Year Of Vibes from Armin Ronacher's Thoughts and Writings
- Pluralistic: A perfect distillation of the social uselessness of finance (18 Dec 2025) from Pluralistic: Daily links from Cory Doctorow
- Moving from WordPress to Substack from charity.wtf
- Grow, Like a Tree Not a Cancer from Jim Nielsen’s Blog
- Pluralistic: All the books I reviewed in 2025 (02 Dec 2025) from Pluralistic: Daily links from Cory Doctorow
Articles from blogs I follow around the net
Doing less, for her
My daughter will be born soon, and I’m reflecting on what that means for my OpenSource work.
via Carlos Becker February 1, 2026The Browser’s Little White Lies
So I’m making a thing and I want it to be styled different if the link’s been visited. Rather than build something myself in JavaScript, I figure I’ll just hook into the browser’s mechanism for tracking if a link’s been visited (a sensible approach, if I d…
via Jim Nielsen’s Blog February 1, 2026$29 million stolen from from Step Finance treasury wallets
The Solana-based defi portfolio tracker Step Finance lost 261,854 SOL (~$28.7 million) when a thief gained access to treasury and fee wallets. It's not yet clear how the attacker was able to steal the funds, although Step Finance…
via Web3 is Going Just Great February 1, 2026Generated by openring