将 WP Discourse 配置为显示 Discourse 的评论

您可以使用 Discourse 作为 Wordpress 的评论系统。评论功能依赖于发布功能,因此您需要设置发布功能才能使评论正常工作。如果您已设置发布功能并准备好设置评论,请观看此短视频或按照以下说明操作。

下一步

设置评论后,您可能需要查看以下主题


说明

设置评论

要使 Discourse 评论显示在您的 WordPress 网站上,您必须选择“启用 Discourse 评论”设置。启用后,您将看到两个选项。“显示评论”选项将为已发布到 Discourse 的每个 WordPress 帖子加载评论模板。此模板将在 WordPress 帖子下方显示 Discourse 评论。“显示评论链接”选项将加载一个评论模板,该模板在已发布的帖子下方显示指向相关 Discourse 主题的链接。链接将显示主题的回复数,但不会在 WordPress 上显示任何回复。

这两个评论选项都通过为 WordPress 帖子加载评论模板来工作。这意味着它们仅在为帖子启用评论时才有效。如果您想为所有帖子启用评论,但又不希望显示尚未发布到 Discourse 的帖子的任何历史 WordPress 评论,请启用“删除 WordPress 评论模板”设置。

设置

以下是其他评论设置功能的简短说明。如果您仍不确定任何设置,请回复此主题并寻求进一步澄清。

使用 Ajax 加载评论

此设置用于从 Wordpress 客户端加载评论,而不是从服务器加载。如果页面缓存阻止在新评论加载到您的网站上,这将非常有用。

加载评论 CSS

此设置加载一个样式表,用于修复 Discourse onebox 和引用在 WordPress 上显示时出现的问题。

显示现有 WP 评论

选择此设置以同时显示已发布到 Discourse 的帖子的现有 WordPress 评论,选择该设置。

现有评论标题

如果您显示现有评论,此设置将在 WordPress 评论上方添加一个标题。

选择性导入设置

有许多设置允许您选择性地导入评论。这些应该是不言自明的。每个设置的默认值都是一个不错的起点,因此除非有原因,否则请不要更改它们。

  • 最大可见评论数
  • 最少回复数
  • 帖子最低分数
  • 最低信任级别
  • 绕过信任级别分数
  • 仅导入版主喜欢的
自定义日期时间格式

此设置格式化显示在您的 WordPress 网站上出现的每个 Discourse 评论的日期。从默认值开始。如果您发现想要更改日期格式,请点击设置描述中的链接以获取有关如何操作的详细信息。

缓存评论 HTML

此设置可用于提高性能。缓存评论 HTML 可减少向 Discourse 发出的请求数量。其关联设置“清除缓存的评论 HTML”应该是不言自明的。

详细的评论日志

启用此项将记录从 Discourse 成功检索到的所有评论,以及错误(默认)。

同步评论数据 Webhook

在“Webhook”设置面板中启用“同步评论数据”Webhook 可以大大减少从 WordPress 到 Discourse 的 API 请求数量。启用 Webhook 之前

  1. 访问设置描述中提供的 Discourse URL(http://forum.example.com/admin/api/web_hooks)。

  2. 点击“新建 Webhook”按钮并填写表单

    • 在“Payload URL”字段中,输入 WP Discourse同步评论数据”字段描述中提供的 URL。它将类似于此,但使用您的 WordPress 网站的 URL:https://wp-discourse.dev/wp-json/wp-discourse/v1/update-topic-content

    • 确保“Content Type”字段设置为 application/json

    • 在“Secret”输入框中,输入至少 12 个字符的文本字符串。然后将相同的密钥复制到 WP DiscourseWebhook Secret Key”设置中。

    • 在“哪些事件应触发此 Webhook?”框中,确保选择了“Post Event”。

    • 如果您只将帖子从 WordPress 发布到特定类别,请使用“触发类别”字段。这样,您的 WordPress 网站就不需要处理与主题无关的主题的 Webhook 请求。

    • 保持“检查有效载荷 URL 的 TLS 证书”设置启用。

    最后,启用“Active”复选框,然后点击创建。保存 Webhook 后,点击“转到事件”按钮。

  3. 返回 WordPress,确保您已将 Discourse 中的 Webhook 密钥输入到“Webhook Secret Key”字段中,并启用“同步评论数据”Webhook 设置。然后保存选项。

Discourse Webhook 现在应该可以正常工作了。您应该通过点击 Discourse 上的 Webhook 的 Ping 按钮(位于 /admin/api/web_hooks/:webhook_id/events)来检查它。确保 ping Webhook 返回状态码 200

调整 WordPress 归档页面的 comments_number 同步周期

为了获取帖子的正确 Discourse 评论数,该插件需要定期向 Discourse 发出 HTTP 请求以获取当前的评论数。在单个页面上,此周期设置为每 10 分钟最多一次。对于归档页面,此周期设置为每 24 小时最多一次。这样做的原因是避免每次访问归档页面时都向 Discourse 发出多个请求。

如果您仍然发现该插件在显示您网站的归档页面时发出了过多的请求到 Discourse,您可以通过挂钩 'discourse_archive_page_sync_period' 过滤器来调整 archive_page_sync_period。您可以通过将类似以下内容添加到主题的 functions.php 文件中来实现:

add_filter( 'discourse_archive_page_sync_period', 'my_namespace_archive_page_sync_period' );
function my_namespace_archive_page_sync_period( $sync_period ) {
  // 这将把归档帖子的同步周期更改为每周一次。
  return WEEK_IN_SECONDS;
}

如果您发现该插件发出的请求不足以从 Discourse 检索归档页面的当前评论数,您可以将类似以下内容添加到主题的 functions.php 文件中。这将把 archive_page_sync_period 设置为 10 分钟。
注意: 在繁忙的网站上,这可能会给您的服务器带来沉重负担。

add_filter( 'discourse_archive_page_sync_period', 'my_namespace_archive_page_sync_period' );
function my_namespace_archive_page_sync_period( $sync_period ) {
  // 这将把归档帖子的同步周期更改为每周一次。
  return 10 * MINUTE_IN_SECONDS;
}

在不加载 WordPress 评论模板的情况下显示评论

WP Discourse 插件使用 WordPress 评论模板来加载 Discourse 评论。如果您的主题未加载评论模板,您可以使用静态 get_discourse_comments 辅助函数来显示评论。该函数要求您提供要显示评论的 WordPress 帖子的 ID。以下是其用法的一个简单示例:

use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments(859);
echo $discourse_comments;

评论的显示方式与在插件的评论设置选项卡中选择“启用 Discourse 评论/显示评论”选项时相同。使用此函数时,将忽略该设置的值,但所有其他评论设置都将得到尊重。

故障排除

Discourse 评论最常见的问题是它们可能不会在帖子发布到 Discourse 后立即显示。此延迟是故意的,因为该插件会尝试减少需要向 Discourse 发出的请求数量。每次加载页面都发出请求会减慢您的网站速度。如果您没有看到评论立即出现,请等待 10 分钟后再刷新页面。

显示 Discourse 和 WordPress 评论时评论数量的问题

wp-discourse 插件使用 WordPress get_comments_number 过滤器钩子,以便可以在整个主题中显示为帖子创建的 Discourse 评论的数量。当帖子同时显示 Discourse 和 WordPress 评论时,这会产生冲突。该插件在大多数地方都能解决该冲突。它无法解决的一个地方是 WordPress 主题通常在评论部分顶部显示的评论标题。此部分以“2 thoughts on…”之类的开头。

最简单的方法是向主题的 css 文件添加一条规则。

.discourse-comments-area ~ .comments-area .comments-title  {
	display: none;
}
7 个赞

@angus 非常好的指南和视频,感谢您的整理。我们已经实现了该插件,但在评论功能上遇到了问题。我们有两个问题/疑问:

  • 当我们在 Discourse 上回复(来自 WordPress 的共享帖子)时,我们看到 WordPress 上的回复计数发生了变化,但我们没有看到任何评论显示出来。
  • 我们想关闭 WordPress 的评论功能,以便用户只能通过 Discourse 回复,这是否可行?

这是我们看到的情况,这个“1”回复来自 Discourse,但您会注意到回复本身不可见:

抄送:@Abdelrahman_MoHamed

@Jacob_Peebles

假设您已遵循以上指南,接下来要检查的是您的主题。您是否正在使用块主题?如果是,请参阅:

是的,只需在 Wordpress 中关闭评论即可。

  1. 从仪表板中选择“设置”>“讨论”。
  2. 取消选中“允许用户评论新文章”旁边的框。
  3. 点击“保存设置”。
1 个赞

@angus - 太好了,这很管用!是的,显然我们使用的是“块”编辑器。您可以在此处看到功能:

唯一奇怪的是样式/字体似乎没有应用到 discourse 评论中。我不确定这是否只是我们主题的问题,还是值得注意的事情。

再次感谢。

抱歉,这是截图。

很高兴它对您 Jacob 有效。

您需要添加自己的评论样式。Discourse 评论开箱即用,样式非常简单,因为每个主题都有自己的样式方法。在您的情况下,一些基本样式应该可以解决问题

ol.comment-list {
    list-style: none;
    padding: 0;
}

img.avatar.photo.avatar-default {
    height: 40px;
    width: 40px;
}

.comment-author.vcard {
   display: flex;
   align-items: center;
   gap: 1em;
}

1 个赞

太棒了 @angus

你好 @angus

感谢您出色的插件和有用的说明!

我已将 Discourse 集成到我的 Wordpress 网站并已连接成功。
我能够在 WP 网站上创建帖子,并看到它作为 Discourse 中的新主题被拉取过来,这很棒!

然而,它在 Discourse 上只显示初始帖子内容作为摘录(例如 hello world 等),并且在 WP 帖子中更改内容后,Discourse 主题内容不会更新。它只有在点击“显示完整帖子”时才会反映内容更改,这意味着我无法更改设置以显示帖子的完整内容而不仅仅是摘录。当我这样做时,它只是从 Discourse 主题中移除了按钮,并且只显示更新前的初始内容。我不知道我是否表达清楚了?

此外,从 Discourse 发布作为主题回复的任何评论都不会出现在 WP 上的帖子下方。我已启用评论,并且我正在使用 Astra 主题,所以不是块编辑器。我不确定我应该怎么做才能解决这个问题。

关于这两点的任何建议都将不胜感激,谢谢!

你好 @Clo,感谢你试用该插件。你能为我阐述一下你理想的发布状态吗?请尝试用“用户故事”的形式来表述。关于评论部分,你的网站是否启用了 WordPress 评论功能?

[引用=“angus, post:1, topic:223493”]
这两种评论选项都通过加载 WordPress 文章的评论模板来工作。这意味着只有当文章启用了评论功能时,它们才能正常工作。
[/引用]

你好 @angus

看起来评论终于从 Discourse 网站同步到了 WP 网站,只是花了一些时间。不过,谢谢!

另外,我想问一下,是否可以在 Discourse 中创建新主题时,插件也能在 WP 中创建新帖子?还是只能反过来操作?

这只能通过在 WordPress 和 Discourse 两侧添加额外的自定义插件来实现。WP Discourse 插件本身并非为此设计。

非常感谢,这很有帮助。
很棒的插件!

1 个赞