Ghost技术问询:如何获取付费公开帖子及创建付费/免费自定义页面
Ghost 付费/免费帖子展示问题解决方案
嘿,我来帮你搞定这两个Ghost的技术需求,一步步拆解:
1. 获取Ghost中所有付费且公开的帖子
首先得明确Ghost里帖子的两个关键属性:
visibility: paid:标记帖子为付费订阅可见(需要会员权限才能查看)status: published:标记帖子为已公开发布(不是草稿、定时或私密状态)
这两个条件结合,就能拿到你要的「已发布的付费帖子」。用Ghost的{{get}}助手实现的代码如下:
{{#get 'posts' filter='visibility:paid+status:published' limit='all' order='published_at desc'}} {{#foreach posts}} {{> post-card }} {{!-- 替换成你主题里的帖子卡片组件 --}} {{else}} <p>暂时没有已发布的付费帖子哦</p> {{/foreach}} {{/get}}
注:Ghost里visibility属性是互斥的,一个帖子只能是public(免费公开)、paid(付费订阅)或members(仅会员可见),不存在同时是paid和public的帖子,所以这里的「付费且公开」应该是指「已发布的付费帖子」。
2. 创建自定义页面展示免费/付费帖子
你之前的代码没生效,主要是踩了几个小坑,我帮你修正并给出完整模板:
问题分析
- 错误使用了
{{#post}}块:这个是单个帖子详情页的上下文,自定义页面属于page类型,不需要包裹这个块,否则会导致{{get}}助手的上下文混乱 - 引号转义错误:
"是HTML转义字符,在Handlebars里直接用单引号即可 - 缺少免费帖子的过滤逻辑:免费帖子对应的
visibility值是public
正确模板代码
1. 付费内容页面(example.com/pro)
创建主题模板文件templates/pro.hbs,内容如下:
{{!< default}} <div class='c-archive'> <h1 class='c-archive__title'>付费专属内容</h1> </div> <div class='o-grid'> {{#get 'posts' filter='visibility:paid+status:published' limit='all' order='published_at desc'}} {{#foreach posts}} {{> post-card }} {{else}} <p>目前还没有付费内容,敬请期待!</p> {{/foreach}} {{/get}} </div>
2. 免费内容页面(example.com/free)
创建主题模板文件templates/free.hbs,内容如下:
{{!< default}} <div class='c-archive'> <h1 class='c-archive__title'>免费公开内容</h1> </div> <div class='o-grid'> {{#get 'posts' filter='visibility:public+status:published' limit='all' order='published_at desc'}} {{#foreach posts}} {{> post-card }} {{else}} <p>暂时没有免费公开的帖子哦</p> {{/foreach}} {{/get}} </div>
页面配置步骤
- 登录Ghost后台,进入「页面」→「新建页面」
- 填写页面标题(比如“付费内容”),在右侧「设置」→「模板」下拉菜单中选择你刚才创建的
pro模板 - 发布页面,访问
你的域名/pro就能看到效果 - 重复上述步骤创建免费内容页面,选择
free模板即可
额外提示
- 如果帖子数量较多,建议把
limit='all'改成具体数值(比如limit='20'),并添加分页逻辑提升加载速度 - 确保你的主题里存在
post-card.hbs组件,如果没有,可以替换成你自己的帖子展示代码(比如直接输出标题、摘要等)
内容的提问来源于stack exchange,提问作者hackemate




