Skip to content

fix: 修复 CMS 发布时未读取文章正文的问题 - #215

Open
Zw-awa wants to merge 1 commit into
wechatsync:v2from
Zw-awa:fix/cms-content-fallback
Open

fix: 修复 CMS 发布时未读取文章正文的问题#215
Zw-awa wants to merge 1 commit into
wechatsync:v2from
Zw-awa:fix/cms-content-fallback

Conversation

@Zw-awa

@Zw-awa Zw-awa commented Jul 26, 2026

Copy link
Copy Markdown

问题说明

在文章编辑器中将文章同步到 WordPress、MetaWeblog 或 Typecho 时,CMS 连接测试可以正常通过,但实际保存草稿会失败。

界面显示以下错误:

Cannot read properties of undefined (reading 'length')

复现步骤

  1. 添加一个 WordPress、MetaWeblog 或 Typecho CMS 账户,并完成连接测试。
  2. 打开任意文章并进入文章编辑器。
  3. 选择已添加的 CMS 账户。
  4. 点击同步,将文章保存到草稿。
  5. 同步失败,并提示读取 undefined.length

原因分析

当前文章同步流程传给平台适配器的正文主要位于:

  • article.html:预处理后的 HTML。
  • article.markdown:转换后的 Markdown。

这与 CodeAdapter 中约定的文章数据结构一致。

但是 WordPress、MetaWeblog 和 Typecho 适配器仍然只读取旧的 article.content

let content = article.content

当编辑器传入的文章没有 content 字段时,适配器会将 undefined 传给后续的图片和正文处理流程,最终在解析正文时产生异常。

连接测试不涉及文章正文,因此连接测试仍然可以成功。

解决思路

在三个 CMS 适配器中按照以下顺序选择可用的文章正文:

let content = article.content || article.html || article.markdown || ''
  1. 优先使用 content,保持对原有调用方的兼容。
  2. content 不存在时,使用编辑器提供的 html
  3. HTML 不存在时,使用 markdown
  4. 最后回退到空字符串,避免将 undefined 传入正文处理流程。

同时更新适配器的文章参数类型,使 contenthtmlmarkdown 与实际可能收到的数据结构一致。

本次修改覆盖:

  • WordPress
  • MetaWeblog
  • Typecho

修复效果

修改前

从编辑器同步文章到 WordPress 时失败:

Cannot read properties of undefined (reading 'length')
浮空页直接报错

修改后

使用相同文章和同一个 ZWAWA Blog CMS 账户重新同步,可以正常保存为草稿。

详情成功

同步历史中也可以看到成功记录:

成功

验证结果

  • WordPress HTML 正文回退测试通过。
  • MetaWeblog HTML 正文回退测试通过。
  • Typecho HTML 正文回退测试通过。
  • Extension 全量测试通过。
  • TypeScript 类型检查通过。
  • Extension 生产构建通过。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant