Streamlining My Blogging Workflow with Obsidian and WordPress

Share this post:
Reading Time: 7 minutes

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:

  1. Install Obsidian
    1. Download Obsidian and explore its basics. It’s straightforward enough, but the plugins and customisations are where it really shines.
  2. Set Up the WordPress Plugin
    1. In Obsidian, open Community Plugins and install “WordPress.”
    2. In WordPress: – Make sure the REST API is on.
    3. Under Users → Your Profile, generate an application password named something like Obsidian Link. Copy the key.
    4. In Obsidian’s WordPress plugin settings, paste your site’s API URL (for example, https://yoursite.com/wp-json) and the password.
  3. Add Plugins for Automation
    1. 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.
  4. My Workflow Automation
    Templates are brilliant for repeated tasks, like adding metadata or connecting notes to your to-do list.

    1. 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.”

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:

  1. 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
  2. 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.
  3. Add the Blog Post Title
    The template automatically appends the new post title beneath the chosen category header in Blog Post Ideas.md.
  4. 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

  1. 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:

  1. 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.

  • December 15, 2024
  • 2
2
0
Would love your thoughts, please comment.x
()
x