CFCF Static Export ProDEMO

在 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。

安装

  1. 把插件目录放进库的 .obsidian/plugins/obsidian-md-publisher/;
  2. Obsidian → 设置 → 第三方插件 → 关闭安全模式 → 启用;
  3. 如果改了 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]] 会:

  1. 读取本地附件;
  2. POST /wp-json/wp/v2/media 上传到 wp-content/uploads/YYYY/MM/;
  3. 把引用替换成返回的 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/posts
  • PUT/PATCH /wp/v2/posts/<id>
  • GET /wp/v2/categories|tags
  • POST /wp/v2/media

够用,且不需要为每个编辑器写适配。

发表评论

邮箱不会被公开。带 * 的为必填项。