Streamlining My Blogging Workflow with Obsidian and WordPress
I took a long break from writing and let my blog languish with stale, old posts. Writing has always been my way of making sense of things, sharing ideas, and building connections.
I have always kept my blog on WordPress. It’s a solid platform for publishing. But the act of writing? That wasn’t what I wanted. I’d spend time fiddling with formatting or hopping between apps, and I got distracted. I tried the WordPress Desktop app, which felt similar to the web interface. Instead, I craved a setup where I could write offline if needed, stay focused, and keep all my tasks in one place. Could I have paid for an app that does it better? Sure, but I’d already been using Obsidian for years as my PKIM and for managing personal and work tasks. So I thought, can I just use Obsidian?
And guess what? When I started exploring Obsidian’s plugins, I realised it could do far more than I expected. With a few changes, I could write, organise, and even publish straight to WordPress, all from a distraction-free app I already rely on.
In this post, I want to show you how Obsidian became that perfect writing tool for me.
Obsidian has a WordPress Plugin!
Why not? It’s already a key part of how I stay organised, and I’ve been using it for personal and work notes. Obsidian treats everything as plain Markdown files, which is simple, portable, and under my control. There’s no locked-in system. Just my data, my way.
What sets Obsidian apart is how flexible it can be. By default, it’s a note-taking app, but the real magic happens when you add plugins. There’s one for almost anything: task management, calendar planning, or even visualising relationships between notes. I already used it for project deadlines and brainstorming ideas. So I wondered if blogging could also work in Obsidian.My blogging process was far from smooth before I found the WordPress plugin for Obsidian. I’d do my research and make notes in Obsidian, then copy it all over to WordPress or write in WordPress directly. That constant switching broke my focus. I wanted one streamlined approach, and everything else I tried felt off.
I went searching for a connection between Obsidian and WordPress, so I could draft and then publish in one go. That’s when I found the WordPress plugin that changed everything.
It was a resounding success. But I did need a few tweaks. Obsidian is now my blogging hub. It gives me a clean, distraction-free space to write, a content calendar system, and tools for tasks and research notes—all in one spot. It even lets me write offline, which has been brilliant on long flights or with poor internet.
After setting up the plugin, I realised I could go a step further. I created a full blogging workflow in Obsidian: a space for planning, a system for tasks, a place to write without distraction, and the ability to publish directly when I’m ready. Obsidian’s flexibility and its plugin ecosystem made it click together almost by itself.
This is the first full blog post I’ve written using that new setup, and it’s been wonderful. I’m not sure if it’ll help anyone else, but I couldn’t resist sharing it
Getting the WordPress Plugin Running
- Enable the REST API in your WordPress settings (if it isn’t already).
- From your WordPress user profile, generate an application password for Obsidian (give it a name like Obsidian Link).
- Paste the REST API URL and that password into the plugin’s settings in Obsidian. Done!
When I hit “Publish” in Obsidian the first time, I felt sure I had to share this. I did test it with some dummy posts first, just to be safe!
My Workflow in Action
After I set up the WordPress plugin in Obsidian, I found a way to streamline my entire blogging approach. From brainstorming to publishing, it all happens in one app. No more hopping between tools or losing focus.
Here’s how it fits together:
- Planning Content – Ideas live in a “Blog Ideas” note, linking to each blog’s main draft. I use the Kanban plugin for a board view with columns like Ideas, Researching, Writing, and Published.
- Writing Without Distractions – Obsidian’s Live Preview mode gives me a clean space to write and see the Markdown formatting in real time.
- Tracking Tasks – For everything — research, edits, graphics — I use the Tasks plugin. Nothing slips through the cracks since each task links to the right blog note.
- Publishing to WordPress – I add categories and tags, preview the post, then publish or schedule without leaving Obsidian.
Why does this work so well for me? It’s mostly the simplicity:
- I can work offline whenever I want.
- All my drafts, tasks, and schedule stay in one place.
- Markdown writing is quick and intuitive, and the WordPress plugin does the rest.
- It keeps me focused on what matters most: writing good posts.
Getting Started
If you fancy trying this, here’s how to set it up:
- Install Obsidian
- Download Obsidian and explore its basics. It’s straightforward enough, but the plugins and customisations are where it really shines.
- Set Up the WordPress Plugin
- In Obsidian, open Community Plugins and install “WordPress.”
- In WordPress: – Make sure the REST API is on.
- Under Users → Your Profile, generate an application password named something like Obsidian Link. Copy the key.
- In Obsidian’s WordPress plugin settings, paste your site’s API URL (for example,
https://yoursite.com/wp-json
) and the password.
- Add Plugins for Automation
- Try these plugins to replicate my workflow:
- Kanban: Visualise your content calendar.
- Tasks: Track tasks for each blog post.
- Templater and Meta-Bind: Automate note creation and updates.
- Try these plugins to replicate my workflow:
- My Workflow Automation
Templates are brilliant for repeated tasks, like adding metadata or connecting notes to your to-do list.- Initial Structure
- This is just how I set mine up. You can adjust to fit your style:
- Create a folder called “Blog Content”.
- Inside, create two files:
- “Blog Post Master List” (my index).
- “Blog Post Ideas” (for jotting down blog titles, linked back to notes in the Drafts folder).
- Make a subfolder called “Drafts.”
- Initial Structure
Putting It All Together
To organise possible topics, I use Blog Post Ideas.md. Categories are headers, and each idea goes under its relevant header. When I create a new blog post:
- Trigger the Process with a Button
Using the Meta-Bind-Button plugin, I added a button in Blog Post Ideas.md. When I click it, a new blog post note is spawned using a template and placed in Blog Content/Drafts:
label: New Blog Post icon: "" hidden: false class: "" tooltip: Add a New Blog Post id: blogPost style: primary actions: - type: templaterCreateNote templateFile: Templates/Blog Post.md folderPath: Blog Content/Drafts fileName: Blog Post.md openNote: true openIfAlreadyExists: true
- Select a Category
The Blog Post.md template script prompts me to select an existing category from Blog Post Ideas.md or create a new one. The post title is then added under that category. - Add the Blog Post Title
The template automatically appends the new post title beneath the chosen category header in Blog Post Ideas.md. - Task Creation
A task is added in Blog Task List.md under ## Ideas, with a link to the new note and a due date fourteen days out.
Here’s the script (inside Blog Post.md) that handles creating the note, updating the ideas file, and adding tasks:
<%* try { const taskFilePath = "Blog Content/Blog Task List.md"; const ideasFilePath = "Blog Content/Blog Post Ideas.md"; // Prompt for Blog Post Title let fileName = await tp.system.prompt("Enter a name for the new blog post file:"); if (!fileName) { new Notice("File name is required!"); return; } await tp.file.rename(fileName); const title = fileName; // Manage Categories const ideasFile = app.vault.getAbstractFileByPath(ideasFilePath); if (!ideasFile) throw new Error(`"${ideasFilePath}" not found.`); const ideasContent = await app.vault.read(ideasFile); const headerRegex = /^(#{1,3})\s+(.*)$/gm; let headers = []; let match; while ((match = headerRegex.exec(ideasContent)) !== null) { const level = match[1].length; headers.push({ level: level, text: match[2].trim() }); } headers.push({ text: "Create New Category", level: null }); let selectedHeader = await tp.system.suggester( headers.map(h => `${"#".repeat(h.level || 1)} ${h.text}`), headers, "Select a Category for the Blog Post" ); if (selectedHeader.text === "Create New Category") { selectedHeader.text = await tp.system.prompt("Enter the name for the new category:"); selectedHeader.level = parseInt( await tp.system.prompt("Enter the header level (1, 2, or 3):", "2"), 10 ) || 2; } const targetHeader = `${"#".repeat(selectedHeader.level)} ${selectedHeader.text}`; const blogPostEntry = `- [[${title}]]`; const updatedIdeasContent = ideasContent.includes(targetHeader) ? ideasContent.replace(new RegExp(`(${targetHeader}\\n)`), `$1${blogPostEntry}\n`) : `${ideasContent}\n\n${targetHeader}\n${blogPostEntry}`; await app.vault.modify(ideasFile, updatedIdeasContent); // Manage Tasks const taskFile = app.vault.getAbstractFileByPath(taskFilePath); if (!taskFile) throw new Error(`"${taskFilePath}" not found.`); const taskContent = await app.vault.read(taskFile); const taskHeader = "## Ideas"; const dueDate = new Date(); dueDate.setDate(dueDate.getDate() + 14); const formattedDueDate = dueDate.toISOString().split("T")[0]; const taskEntry = `- [ ] [[${title}]] @{${formattedDueDate}}`; const updatedTaskContent = taskContent.includes(taskHeader) ? taskContent.replace(new RegExp(`(${taskHeader}\\n)`), `$1${taskEntry}\n`) : `${taskContent}\n\n${taskHeader}\n${taskEntry}`; await app.vault.modify(taskFile, updatedTaskContent); new Notice(`Blog post "${title}" created successfully.`); } catch (error) { new Notice(`Error: ${error.message}`); console.error(error); } %>
Once this is in place, just open a new note for your post, draft in Markdown, and publish—no more bouncing between apps.
Start Writing and Publishing
After everything is set, writing and publishing feels simple. Here’s my process:
Draft Your Blog Post
- Tap New Blog Post in Blog Post Ideas.md. It instantly creates a note from Blog Post.md with front matter like:
--- title: "Your Post Title" categories: [ ] tags: [ ] featured_image: "" status: draft ---
- I use these fields so I don’t forget metadata, like categories, tags, or a featured image.
- The default status is draft, so I don’t post anything by accident.
Publishing to WordPress
Obsidian’s WordPress plugin sends Markdown right to your site. How to do it:
- Fill Out Metadata:
- Categories: One or more for each post.
- Tags: Organise content by topic.
- Featured Image: A URL of the image that represents your post.
- Publish Status: Change status to published or add a publish date.
--- title: "How to Use Obsidian for Blogging" categories: [Obsidian, Productivity] tags: [Markdown, WordPress, Blogging] featured_image: "https://example.com/path/to/image.jpg" status: published ---
- Preview Your Post: Check that everything renders properly and your metadata is correct.
- Publish or Schedule:
- For immediate release, switch status to published and click Publish in the plugin.
- To schedule, add a publish_date field, like:
publish_date: "2024-12-21T09:00:00"
Markdown Compatibility
WordPress supports Markdown through the plugin, converting it to HTML in the background. It keeps your headings, lists, links, and images neat.
Final Thoughts
This method has changed how I blog. Everything stays in one place now, and I’m free from juggling multiple apps or losing my train of thought. The WordPress plugin connects my writing with publishing, turning Obsidian into a single hub for planning, writing, and sharing.
And it can adapt to your style. You might adjust the templates, add other plugins, or automate more steps. I love that Obsidian bends to me rather than forcing a rigid setup. If you’ve ever felt weighed down by the overhead of blogging, I hope you give this approach a try.
I’d also love to hear your own tips or see how you’ve set up a similar system. Please reach out if you’ve got ideas on making this even more versatile—I’m eager to learn from you and refine this workflow for us all!
Discover more from Vinay Sastry
Subscribe to get the latest posts sent to your email.
Thanks for the write up! I’ve been copying from Obsidian to WP manually, and this may save some time!
Thanks!