📖 本文共 1,119 字,阅读需要 4 分钟
为何我最近的文章发布后,markdown里没有写回ID了?
根据代码分析,文章发布后没有写回ID的问题,最可能的原因是 writeBackId 函数的调用条件没有被满足。
让我检查一下 publish.js 中的相关逻辑:
javascript
// 创建新文章时的代码(第459-461行)
if (!data.id && result.id) writeBackId(absMd, result.id);
写回ID需要同时满足两个条件:
!data.id– front matter 中没有id字段result.id– WordPress API 返回了文章ID
排查到的原因,已确定
1. front matter 中已经有 id 字段了
如果你的 markdown 文件已经包含 id: 这一行(即使是空的),条件 !data.id 可能不会触发。
检查你的 markdown 文件 front matter:
---
id: # ← 即使为空,data.id 可能是空字符串
title: xxx
---
原来是Python脚本创建markdown空白文本时,修改了frontmatter,加上了ID哪一行。现在删除了。不用修改publish.js脚本。
2. data.id 的判断问题
JavaScript 中,空字符串 "" 被认为是 falsy,所以 !data.id 应该为 true。但如果有空格或其他字符,可能就不成立了。
3. 文件读取/写入权限问题
写回时可能没有写入权限,但代码会捕获错误只显示警告。
解决方案:
我建议修改 writeBackId 函数的调用逻辑,让它更可靠:
修改第459-461行为:
// 创建新文章后写回ID
if (result.id) {
// 更宽松的条件:只要没有有效的数字ID就写回
const hasValidId = data.id && !isNaN(Number(data.id)) && Number(data.id) > 0;
if (!hasValidId) {
writeBackId(absMd, result.id);
} else if (process.env.DEBUG_PUBLISH) {
console.log(`[DEBUG] 已有有效ID ${data.id},跳过写回`);
}
}
或者,你可以在调用时添加调试信息来确认问题:
bash
DEBUG_PUBLISH=1 node publish.js your-post.md
这会输出详细的调试日志,包括是否进入了写回逻辑。
快速检查方法:
查看你最近发布的文章 markdown 文件,front matter 中是否有 id: 行?如果有,是空的还是有数字?
- 如果有空的
id:行,说明进入了写回逻辑但没成功写入 - 如果完全没有
id:行,说明根本没进入写回逻辑
