在 Obsidian 里写完,一键发布
它做什么
obsidian-md-publisher 是一个零依赖的 Obsidian 插件。它把当前笔记的 Markdown 原文通过 WordPress REST 兼容端点发到站点:
- 新建走
POST /wp-json/wp/v2/posts; - 更新走
PUT /wp-json/wp/v2/posts/<id>; - 请求体带
content_format: "md",站点按原稿存储,渲染时才转 HTML。
安装
- 把插件目录放进库的
.obsidian/plugins/obsidian-md-publisher/; - Obsidian → 设置 → 第三方插件 → 关闭安全模式 → 启用;
- 如果改了
main.ts,重新构建:
npx esbuild main.ts --bundle --external:obsidian \
--format=cjs --target=es2018 --outfile=main.js
配置
| 字段 | 说明 |
|---|---|
| 端点 URL | https://<你的站点>/wp-json/wp/v2/posts |
| 用户名 | CMS 后台的用户名 |
| 应用密码 | 后台「用户 → 应用密码 → 生成」 |
| 自动上传图片 | 默认开,![[图.jpg]] 会先上传再替换 |
| 图片前缀 | 上传失败时的兜底路径 |
认证固定用 Basic(base64(用户名:应用密码))。用 Bearer 会 401。
Frontmatter 约定
---
title: 文章标题
status: draft
slug: my-post
categories: [guide]
tags: [obsidian, markdown]
wp_id: 178974623300589
---
正文……
status默认draft,确认无误再改publish;categories/tags建议写 slug;- 首次发布后插件会把返回的
id写回wp_id,之后同一个文件就是更新。
图片
开启自动上传后,笔记里的 ![[a.jpg]] 会:
- 读取本地附件;
POST /wp-json/wp/v2/media上传到wp-content/uploads/YYYY/MM/;- 把引用替换成返回的 URL。
支持 jpg / png / gif / webp,单图上限 10MB。SVG 不支持(避免 XSS)。
已知限制
- 双链不会渲染:
[[笔记]]是 Obsidian 语法,Worker 用标准 CommonMark/GFM,不认。图片已经被插件转换,双链暂时保持原样; - 没有冲突检测:如果你在 CMS 后台改过同一篇,下一次从 Obsidian 发布会覆盖;
- 没有重试队列:失败会在 Obsidian 里弹 Notice,正文不会丢。
为什么用 REST 而不是自定义 API
因为这套接口是 WordPress 生态的"通用语言"。除了 Obsidian,Ulysses、脚本、手机快捷指令、任何能发 HTTP 的工具都能接。
站点的写入口只实现了 WP REST 的一个子集:
GET/POST /wp/v2/postsPUT/PATCH /wp/v2/posts/<id>GET /wp/v2/categories|tagsPOST /wp/v2/media
够用,且不需要为每个编辑器写适配。