You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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(仅会员可见),不存在同时是paidpublic的帖子,所以这里的「付费且公开」应该是指「已发布的付费帖子」。

2. 创建自定义页面展示免费/付费帖子

你之前的代码没生效,主要是踩了几个小坑,我帮你修正并给出完整模板:

问题分析

  • 错误使用了{{#post}}块:这个是单个帖子详情页的上下文,自定义页面属于page类型,不需要包裹这个块,否则会导致{{get}}助手的上下文混乱
  • 引号转义错误:&quot;是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>

页面配置步骤

  1. 登录Ghost后台,进入「页面」→「新建页面」
  2. 填写页面标题(比如“付费内容”),在右侧「设置」→「模板」下拉菜单中选择你刚才创建的pro模板
  3. 发布页面,访问你的域名/pro就能看到效果
  4. 重复上述步骤创建免费内容页面,选择free模板即可

额外提示

  • 如果帖子数量较多,建议把limit='all'改成具体数值(比如limit='20'),并添加分页逻辑提升加载速度
  • 确保你的主题里存在post-card.hbs组件,如果没有,可以替换成你自己的帖子展示代码(比如直接输出标题、摘要等)

内容的提问来源于stack exchange,提问作者hackemate

火山引擎 最新活动