Publish your Obsidian notes directly to WordPress as Gutenberg block-formatted posts. This plugin converts Obsidian-flavored markdown (including callouts, wikilinks, and standard formatting) into WordPress block markup, handles image uploads to your WordPress media library, and authenticates securely using Application Passwords. Please note that this plugin is still under active development. Share any bugs you find via the Issues tab.
- One-click publishing - Publish notes via command palette or right-click context menu
- Gutenberg block output - Converts markdown to native WordPress block format
- Image uploads - Automatically uploads local images to WordPress media library
- Folder scoping - Restrict publishing to notes in a specific folder
- Frontmatter control - Set post properties like title, slug, categories, tags, excerpt, and scheduled date
- Post status control - Publish as draft, published, private, or scheduled (per-post or default setting)
- Update support - Re-publish notes to update existing WordPress posts (NOTE: still needs more testing! use with caution.)
- Install BRAT from Obsidian Community Plugins
- Open Settings > BRAT > Add Beta plugin
- Enter the repository URL:
serabi/obsidian-to-wp - Select Add Plugin
- Enable the plugin in Settings > Community plugins
BRAT will automatically check for updates and keep your plugin current.
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Create a folder named
obsidian-to-wpin your vault's.obsidian/plugins/directory - Copy the downloaded files into this folder
- Reload Obsidian and enable the plugin in Settings > Community plugins
- Ensure your WordPress site has the REST API enabled (yes, you can do this on WordPress.com!)
- Create an Application Password:
- Go to Users > Profile in WordPress admin
- Scroll to Application Passwords
- Enter a name (e.g., "Obsidian Publisher") and click Add New Application Password
- Copy the generated password to someplace safe, like a password manager (you won't see it again)
- Open Obsidian Settings > Obsidian to WordPress
- Enter your WordPress site URL (e.g.,
https://example.com) - Enter your WordPress username
- Enter the Application Password you created
- Click Test to verify the connection
- Optionally configure:
- Publishable folder - Only notes in this folder can be published
- Default post status - Draft, Published, or Private
- Upload images - Toggle automatic image uploads
Option 1: Command Palette
- Open the note you want to publish
- Press
Cmd/Ctrl + Pto open the command palette - Search for "Publish current note to WordPress"
- Press Enter
Option 2: Context Menu
- Right-click on a note in the file explorer
- Select Publish to WordPress
Or right-click in the editor and select Publish to WordPress.
Control post properties using YAML frontmatter at the top of your note:
---
title: My Blog Post Title
slug: my-custom-url-slug
status: draft
categories:
- Technology
- Tutorials
tags:
- obsidian
- wordpress
excerpt: A brief summary of my post for previews and SEO
date: 2024-12-25T10:00:00
---| Field | Description |
|---|---|
title |
Post title (defaults to filename) |
slug |
URL slug/permalink |
status |
draft, publish, private, or future |
categories |
List of category names (created if they don't exist) |
tags |
List of tag names (created if they don't exist) |
excerpt |
Post excerpt/summary |
date |
Scheduled publish date (ISO 8601 format, requires status: future) |
wp_post_id |
WordPress post ID (auto-set after first publish) |
After publishing a note, the plugin adds a wp_post_id field to the frontmatter. Subsequent publishes will update the existing WordPress post instead of creating a new one.
The plugin converts the following Obsidian markdown elements to Gutenberg blocks:
| Obsidian | WordPress Block |
|---|---|
Headings (#, ##, etc.) |
Heading block |
| Paragraphs | Paragraph block |
| Code blocks | Code block |
Blockquotes (>) |
Quote block |
Unordered lists (-, *) |
List block |
Ordered lists (1., 2.) |
List block (ordered) |
Images (![](), ![[]]) |
Image block |
Callouts (> [!note]) |
Quote block with callout styling |
Horizontal rules (---) |
Separator block |
- Bold (
**text**) - Italic (
*text*) Strikethrough(~~text~~)Inline code(`code`)- ==Highlights== (
==text==) - Links (
[text](url)) - Wikilinks are converted to plain text
- Featured image support
- Custom post type support
- Conflict detection and resolution
- Other ideas? Please share under Issues :)
- Verify your site URL includes
https://(if applicable) and has no trailing slash - Ensure the username matches exactly (case-sensitive)
- Check that Application Passwords are enabled on your WordPress site
- Some security plugins may block REST API access - check your plugin settings
- Verify the image files exist in your vault
- Check that the images use supported formats (JPG, PNG, GIF, WebP, SVG)
- Ensure your WordPress user has media upload permissions
- Check if the post was created as a draft (look in Posts > All Posts and filter by status)
- Verify categories exist or check if they were created with correct names
# Install dependencies
npm install
# Development build with watch
npm run dev
# Production build
npm run buildMIT License - see LICENSE for details.
If you find this plugin useful, consider:
- Starring the repository on GitHub
- Reporting bugs or suggesting features via GitHub Issues
- Contributing code improvements via Pull Requests
Made with <3 for the WordPress and Obsidian communities