特色图片

ghost-giscus-plugin 预览

本页的评论是这个插件按默认设置放在正文正后方的。在左侧面板改变位置、间距以及是否存在订阅者评论区,实际的评论就会随之移动。

开始之前

只要页面上有带 giscus 类名的元素,giscus 就会把评论挂载到其中。这个插件只是在你想要的位置创建那个元素。评论的实际运行和存储仍由 giscus 和 GitHub Discussions 负责,所以不会重新实现任何东西。

安装方法

在 Ghost 中,把下面两段脚本粘贴到设置的 code injection 站点页脚里。第一段是这个插件,第二段是官方的 giscus 标签。

<script src="https://cdn.jsdelivr.net/gh/GreedyLabs/ghost-giscus-plugin@1/giscus-mount.min.js"
        data-target=".gh-content"
        data-place="after"
        data-class="gh-comments gh-canvas"
        data-padding-bottom="48"></script>

<script src="https://giscus.app/client.js"
        data-repo="[YOUR REPO]"
        data-repo-id="[REPO ID]"
        data-category="[CATEGORY]"
        data-category-id="[CATEGORY ID]"
        data-mapping="pathname"
        data-theme="preferred_color_scheme"
        crossorigin="anonymous"
        async></script>

顺序很重要

这个插件必须放在 giscus 脚本之前。giscus 在运行的那一刻就会检查是否存在 giscus 元素并确定挂载位置,所以我们的脚本必须先把那个位置创建出来。顺序反了,评论就会落在脚本标签的位置上。

选项设置

所有行为都通过脚本标签上的选项配置:以哪个元素为基准 (data-target)、相对它附加到哪个位置 (data-place,取 replace、append、prepend、before、after 五种之一)、添加到挂载包装器上的类名 (data-class,以空格分隔,可添加多个以继承主题样式),以及四个方向的内边距 (data-padding-top、data-padding-right、data-padding-bottom、data-padding-left,单位为 px)。当找不到目标元素时,页面守卫会移除 giscus 脚本,避免评论落到错误的位置;用 data-guard="false" 可以关闭它。

data-target=".gh-content"
data-place="after"
data-class="gh-comments gh-canvas"
data-padding-bottom="48"

选择位置

常见的做法有两种:把评论放在正文正后方,或替换已有的评论区块。下面依次介绍这两种。

放在正文之后

推荐的默认配置是 data-target=".gh-content" data-place="after" data-class="gh-comments gh-canvas" data-padding-bottom="48"。它在正文 (.gh-content) 正后方创建挂载点,并继承主题的 gh-comments gh-canvas 类名,因此间距和宽度看起来与主题浑然一体。这种做法最稳妥,因为正文在每个页面上都始终存在。与可能被隐藏、只对会员显示的评论区不同,这个目标不会消失,因此在任何地方都表现一致。

<script src="https://cdn.jsdelivr.net/gh/GreedyLabs/ghost-giscus-plugin@1/giscus-mount.min.js"
        data-target=".gh-content"
        data-place="after"
        data-class="gh-comments gh-canvas"
        data-padding-bottom="48"></script>

替换已有的评论区块

如果你的主题已经有评论区块,就用 data-target=".gh-comments" data-place="replace" 复用那个位置。这样无需修改主题文件,仅凭 code injection 就能重现 <div class="gh-comments gh-canvas giscus"></div>,从而继承主题已设定的位置与样式。当存在可匹配的区块时适合这样做。需要注意的是:Ghost 的原生评论仅对会员开放,所以在关闭该功能的站点上,.gh-comments 元素可能根本不存在。这时请改用上面放在正文之后的默认配置。

<script src="https://cdn.jsdelivr.net/gh/GreedyLabs/ghost-giscus-plugin@1/giscus-mount.min.js"
        data-target=".gh-comments"
        data-place="replace"></script>

giscus 设置

仓库连接、分类和 repo-id 等值在 giscus 官方站点获取。在下面输入你的仓库,它就会生成可直接粘贴的 giscus 标签。

在 giscus.app 上配置 →

常见问题

评论出现在脚本标签处,而不是我想要的位置。

你的插件脚本排在 giscus 脚本之后了。把它们调换,让这个插件排在前面。

我只想在某些页面显示评论。

让基准元素只存在于那些页面上就行。选择器匹配不到任何元素时插件什么都不做,所以用 data-target 指向只在文章页出现的元素,评论就只会出现在文章页。

我想沿用主题的评论间距。

如果规则在主题样式表里,用 data-class 加上那个类名来继承它;否则用 data-padding-bottom 直接设置数值。

结语

它是一个轻量工具,让官方 giscus 保持不动,只替你确定位置。守住一行代码和正确的顺序,它在任何站点上都表现一致。