如何获取Contentful条目最后一次发布的日期?
Contentful 跨状态获取条目最后一次发布日期的实现方案
原生字段的适用范围与局限
- 条目处于已发布状态时,不建议用
sys.updatedAt取发布时间:该字段会在草稿保存、未发布内容修改时同步更新,和实际发布时间可能存在偏差,准确的当前版本发布时间应取sys.publishedAt字段。 - 条目被取消发布退回草稿状态后,原生
sys.publishedAt字段会被自动置空,sys.updatedAt仅会记录取消发布、后续编辑草稿的操作时间,默认没有原生字段留存历史最后一次发布的时间,属于产品默认设计逻辑。
可落地的两种实现方案
方案1:Webhook 自动持久化最后发布时间(推荐)
这个方案维护成本最低,查询效率最高,适合绝大多数场景:
- 在Contentful空间新建一个Date类型的自定义字段,字段名可设为
lastEverPublishedAt,将字段权限设置为仅API可写,避免后台编辑误修改。 - 配置两个触发事件的Webhook:
- 绑定
Entry.publish事件:条目每次发布时,Webhook接收事件payload中的sys.publishedAt值,自动写入对应条目的lastEverPublishedAt字段 - 绑定
Entry.unpublish事件:触发取消发布操作时,不对lastEverPublishedAt字段做任何更新,保留历史写入的最后一次发布时间
- 绑定
- 后续无论条目处于发布状态还是草稿状态,直接读取
lastEverPublishedAt字段即可拿到准确的最后一次发布日期。
方案2:通过Management API回溯历史快照
如果不想新增自定义字段、查询频率较低,可以用这个方案:
- 调用Content Management API的条目快照接口,拉取目标条目的全量历史版本记录
- 过滤版本列表中状态为已发布的快照记录,按版本号倒序取第一条,该条记录携带的
sys.publishedAt就是条目历史上最后一次的发布时间 - 该方案的缺点是接口调用成本高,条目版本越多查询速度越慢,不适合高频调用的业务场景。
注意:不要使用
sys.firstPublishedAt字段实现该需求,这个字段仅记录条目第一次发布的时间,后续重新发布、取消发布操作都不会更新该字段值,无法匹配最后一次发布日期的取值要求。
内容的提问来源于stack exchange,提问作者Tsukuruu
相关产品推荐
相关产品推荐

