Discourse评论框出现两次

出现 2 个 discourse 评论框。

平台:WordPress
主题:Astra

之前我们使用的是 extol 主题,然后迁移到了 astra。通过 astra 网站构建器添加了评论部分挂钩,并根据显示条件将其放置在帖子下方。

所有博客帖子都正常显示评论部分,只有 3 篇帖子(显示两次 discourse 评论部分)。

有人能帮帮我吗?

你好,这看起来像是你的主题出现的问题,或者可能是你使用“Astra Site Builder”的方式有问题,但我们仍然会尽力提供帮助。

也许你可以详细说明一下这是什么样子的?你是否使用了任何代码?你能提供“Astra Site Builder”的文档链接吗?它是一个支持区块的主题吗?请尽量提供详细信息。

1 个赞

感谢 @angus 您的及时回复。

实际上,我在编辑代码时看不到任何代码,并且我正在使用主题默认的单篇帖子模板,该模板不应包含 discourse 评论代码。

奇怪的是,这仅发生在以下帖子中:Strange thing is this happening with only following posts: - Pastebin.com [请检查 pastebin,我已添加链接]

其他帖子仅显示我通过 astra 网站构建器添加的评论框。

是的,astra 是一个启用了块的主题。这是它的文档:Documentation Docs

您是否使用了 WP Discourse Comments Block?

1 个赞

是的,我在 Astra 网站构建器上使用了 WP Discourse 评论块。即使我禁用了 Astra 网站构建器钩子,这个额外的 Discourse 评论框仍然显示在帖子下方。

以前我们使用 extol 主题。我们在单个帖子页面本身添加了 Discourse 评论块。

然后我们迁移到了 Astra。

Astra 有一些限制,所以我们无法编辑默认的单个帖子模板。这就是为什么我通过 Astra 站点构建器钩子添加了 Discourse 评论框,它工作得很完美。

即使我禁用了 Astra 站点构建器钩子,这 3 个页面仍然显示 Discourse 评论框,我们没有在帖子中添加评论框块。而且真的找不到它是从哪里来的。

请在 WP Discourse > Comments 中禁用“启用 Discourse 评论”设置,并告诉我该设置会产生什么影响(请确保保存设置更改)。

如果我禁用此设置,两个评论框都会消失。

1 个赞

好的,您可以重新启用它。

问题在于,无论您使用哪种主题和网站构建器组合,您都在同一页面上同时拥有 PHP 文章模板和区块文章模板(这不正常)。这就是发生这种情况的原因。

如果您想在单个页面中加载两个模板,则需要从 PHP 文章模板中删除 comments_template 行。

1 个赞

如果它来自 php,我想知道为什么它只对特定的 3 个帖子可见。
我在 single.php 文件中找不到 comments_template:cry:

1 个赞

如果我在自定义设置中禁用评论,只有评论框会消失。Discourse 评论框仍然可见。

1 个赞

还是没弄明白。

当有人在 discourse 论坛帖子中发表评论时,相关的博文下方会出现一个新的评论部分。我找不到 comments_template

您能推荐一些关于此的文章或视频教程吗?

@angus

1 个赞

我通过额外的 CSS 隐藏了一个评论部分。

这是一个临时解决方案。如果有任何有效的方法,请告诉我,我会应用。

1 个赞

您正在使用的 PHP 模板中有一个 comments_template 函数调用,导致了此问题。它看起来会像这样。

<?php comments_template(); ?>

具体位置取决于您使用的 PHP 模板。找到该函数即可解决问题。很抱歉,我们或文章能提供的帮助不多了。

我唯一能想到的其他建议是联系支持“Astra”的人员。这里根本的问题是您正在使用的 PHP 模板和区块的组合。也许他们能对此有所启发。

2 个赞

首先,我想对@angus表示衷心的感谢,感谢您一直支持我并提供如此周到的指导。您的支持对我意义重大,我非常感谢您为帮助我解决此问题所付出的时间和精力。让我带您了解我所探索和尝试的一切,希望能帮助到其他遇到类似问题的人。

背景和初始设置:
最初,我们使用的是Extol主题,我们将Discourse评论块直接添加在单个帖子页面本身。这工作得非常好。当我们切换到Astra主题时,情况变得更加复杂。由于Astra有一些限制(例如无法轻松编辑默认的单个帖子模板),我通过Astra Site Builder钩子添加了Discourse评论框,并根据显示条件将其放置在帖子下方。

这对于大多数帖子来说都很顺利,但对于三个特定的帖子,Discourse评论部分出现了两次。我无法弄清楚为什么只对这些帖子发生这种情况,而其他帖子则显示正常。这种异常让我认为可能是旧的Extol设置的残留,但我无法确定任何确切的地方。

探索问题:

  • 我首先检查了帖子编辑器,寻找可能为Discourse评论手动启用或禁用的任何设置或块。令人惊讶的是,那里什么都没有——没有额外的块,也没有不同的设置。
  • 接下来,我禁用了Astra Site Builder钩子,看看是否会移除额外的评论部分。结果没有;重复的框仍然存在。这表明重复发生在Astra Site Builder设置之外。
  • 然后,我按照您的建议,尝试禁用WP Discourse设置中的“启用Discourse评论”。这移除了两个评论部分,表明两者都通过此集成以某种方式生成。
  • 重新启用后,我深入研究了主题文件。我搜索了single.php、content-single.php和其他相关模板文件comments_template();的任何实例。不幸的是,我找不到任何明确调用此函数的代码。这让我感到困惑。如果这是一个PHP模板问题,为什么我找不到它?
  • 我还尝试检查自定义模板。也许这三个帖子使用了不同的模板?我也无法确认这一点。一切都指向默认设置。
  • 另一个理论与评论同步有关——也许当有人在Discourse论坛上评论时,它会触发另一个评论部分出现在相关博客文章下方。这似乎是合理的,但我找不到直接链接到此行为的设置或文档。
  • 我采取了临时的CSS修复来隐藏重复的评论部分:

在WP主题自定义器附加CSS中添加CSS

#comments {
    display: none !important;
}

在Astra钩子中添加CSS:

#comments {
    display: block !important;
}

虽然这有效,但我同意这并非永久解决方案。我更愿意解决根本原因。

想法和理论:

  • 我怀疑这可能是Astra处理钩子和块更深层的问题——也许在嵌入Discourse评论的方式上存在某种冲突或重复。
  • 另一种可能性是,旧的Extol主题存在隐藏的设置或遗留配置,仍在影响着事物。
  • 或者,这可能与Discourse如何与WordPress同步有关。当在论坛中发表评论时,它可能会在WordPress网站内触发某些内容,从而创建额外的部分。

我尚未尝试的操作:

  • **联系Astra支持:**正如您建议的,这可能值得一试。他们可能知道类似的问题,或者可以提供关于他们主题如何处理评论和钩子的见解。
  • **禁用除WP Discourse之外的所有插件:**这可能有助于隔离是否是另一个插件导致了这种行为。
  • **测试一个全新的帖子:**从头开始创建一个新帖子,看看问题是否会重现,这可能会揭示一些东西。

后续步骤:
目前,我认为我将尝试联系Astra支持,并可能禁用插件进行更多测试。我也许会尝试另一种方法,使用子主题,看看是否能更精确地手动处理Discourse评论部分。

Angus,再次感谢您的帮助和耐心。您的见解非常有价值,尽管我还没有完全解决它,但我感觉离理解正在发生的事情更近了。如果其他人有任何想法、见解或类似问题的经验,我很想听听!

如果我发现任何新东西,我会继续深入研究并在那里更新。祝好!

2 个赞

您是否启用了“显示现有 WP 评论”设置?

2 个赞

我尝试启用/禁用设置,但对额外的 Discourse 评论框没有任何影响。

谢谢 @Arkshine

1 个赞

抱歉,我之前没有看对问题!
我以为你只说的是这个:


我认为你的问题是符合预期的。
Astra 主题不支持全站编辑功能,也不支持区块。
换句话说,Astra 不是一个区块主题,要自定义页面,你需要使用第三方页面构建器(例如,在你的情况下的 Elementor)。

如果你没有使用 Discourse 区块来替换原始的评论区块,你肯定会看到重复。Angus 在他的视频中展示了如果你有一个区块主题需要做什么:https://meta.discourse.org/t/wp-discourse-comments-block/249790。

当你使用钩子添加 Discourse 区块时,你并不是在替换评论区域;你是在特定的位置放置自定义代码。


解决方案是什么?

如果你喜欢 Astra 钩子的外观/位置,有一种方法可以移除原生的 WP 评论区域。你可以添加这段 PHP 代码。如果你需要关于如何操作的帮助,请参阅 https://wpastra.com/docs/add-custom-php-code/。

add_action(
	'init',
	function() {
		if ( class_exists( 'Astra_Loop' ) ) {
			remove_action( 'astra_template_parts_content', array( Astra_Loop::get_instance(), 'template_parts_comments' ), 15 );
		}
	},
	11
);

希望这有帮助!

4 个赞

非常感谢您,@Arkshine :tada:
终于,原生的评论区不再可见了——这真是一段漫长的旅程!

也衷心感谢 @angus。您在此过程中展现出的耐心、指导和深刻见解确实无比宝贵。我真诚地感谢您为帮助我解决这个问题所付出的时间和精力。

从测试不同的设置到调试块和 PHP 模板的混合,我探索了所有方法——从禁用 Astra 钩子到调整 CSS,检查评论模板,甚至追踪为什么只有某些帖子受到影响。这真是一场反复试验的过山车,但每一步都帮助我更好地理解了系统。

没有您的专业知识和乐于助人的精神,这一切都不可能实现。您的帮助不仅解决了问题,还让我学到了很多关于 WordPress、Discourse 和主题集成方面的知识。我感激不尽。

对于任何面临类似问题的人:继续测试,继续学习,永远不要犹豫寻求帮助。这个社区太棒了! :rocket:

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.