📢 欢迎访问本站!本站持续更新优质内容。哈啊哈

markdown API发文系统突然不写回ID到markdown了-问题排查

📖 本文共 1,119 字,阅读需要 4 分钟

为何我最近的文章发布后,markdown里没有写回ID了?

根据代码分析,文章发布后没有写回ID的问题,最可能的原因是 writeBackId 函数的调用条件没有被满足

让我检查一下 publish.js 中的相关逻辑:

javascript

// 创建新文章时的代码(第459-461行)
if (!data.id && result.id) writeBackId(absMd, result.id);

写回ID需要同时满足两个条件:

  1. !data.id – front matter 中没有 id 字段
  2. 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: 行,说明根本没进入写回逻辑

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部