能否一次性删除所有“自动顶起”的消息?

搜索后发帖:
我喜欢“自动置顶帖子”以保持帖子更新。但我希望访客在访问帖子时,不会看到几十条“自动置顶”的消息。

有没有办法偶尔手动或自动(或两者兼有)删除它们?

我之所以这么问,是因为我发现以我的水平来看,无论我的愿望是什么,大多数情况都已经被解决了。

2 个赞

您好 @Bathinda

您可以手动点击删除图标,就像删除其他帖子一样:

2 个赞

谢谢,但这并不是删除不同主题上数百条顶帖的实用方法。

我甚至无法在一个主题中选择所有“顶帖”消息。

1 个赞

没有内置的功能可以执行此类批量操作。

您可以使用 Rails 脚本删除现有的自动置顶消息,例如:

  1. SSH 登录到您的服务器

  2. cd /var/discourse

  3. ./launcher enter app

  4. rails c

  5. Post.where("action_code = 'autobumped'").destroy_all

:warning: 当然,以防万一,请务必先进行备份。

4 个赞

这就够了。
谢谢。

有没有什么命令可以让我们在发出“destroy (删除)”命令之前先列出/查看所有这些消息?

1 个赞

最好的方法是从 Discourse 界面使用 Data Explorer 来完成:

使用以下查询:

SELECT * from posts
WHERE action_code = 'autobumped'

3 个赞

啊!!这就是我想要的查询,这让我很高兴。再次感谢。

2 个赞

虽然建议的查询显示了所有包含“auto-bumped”消息的主题。但事实证明它并没有多大帮助。


它只返回了包含数千条“Auto-Bumped”消息的数百个主题,但没有说明有多少条此类消息存在于多少个主题中。

所以,我认为,最终我只能在 rails console 的“黑屋”里挥舞斧头(这有点吓人)。

我有点担心,因为它会一次性影响数千个主题/帖子。如果主题内有一些“全选”按钮,可以将所有“自动顶帖”消息一起选中,然后我们就可以在任何主题内一键删除这些消息。如果有人想用一个命令删除所有主题所有此类消息,那么他将不得不输入“rails”。

我不是在抱怨。我只是在表达我的想法。

1 个赞

您告诉我的第五行 Rails 命令在删除所有这些帖子之前会询问或提示任何内容吗?或者它会直接执行被告知的操作,没有任何警告等,也没有恢复的机会?

如果可能,我们能否先从任何主题中删除“自动顶帖消息”,而不是从整个网站中删除?

另外,您能否提供/告诉任何 Rails 命令来查看将要删除的帖子的样本?

谢谢。

data-explorer 中类似这样的内容可能有助于提供概览:


SELECT p.topic_id,
       COUNT(p.id) AS count
FROM posts p
WHERE action_code = 'autobumped'
GROUP BY p.topic_id
ORDER BY count DESC

但是,我要提醒您,如果您不熟悉 rails 控制台,请不要在实时站点上使用它进行此类更改。您可能想先搭建一个测试站点并进行练习,然后再进行操作。:+1:

3 个赞

是的,这在设计者/开发者提供的范围内解决了问题。

但我仍然想说,应该有一些“管理员”命令,在管理员设置或正在查看的主题中,选择任何一个主题或所有主题中的所有“重复(自动顶起)的消息”,并在管理员希望的时候将其删除。

也许您可以用 CSS 来隐藏这些消息?不幸的是,我认为 post-small-action 小部件目前不包含操作类型作为 CSS 类,因此您无法专门定位“bump”消息。也许主题组件可以提供帮助?

1 个赞

是的,在建议数据浏览器解决方案之前我已经检查过了。
为小型操作添加特定类可以成为一个很好的 Feature 建议。

1 个赞

请提供一些建议。
我可以直接将内容复制粘贴到组件中。我不会编码。

我还没有用过插件API,但我确实看到有一个方法可以向小型操作帖子添加类:

所以我做了一个主题组件,它包含在Head部分:

<script type="text/discourse-plugin" version="1.6.0">
  api.addPostSmallActionClassesCallback(post => {
    return ["small-action-" + post.actionCode]
  });
</script>

…以及CSS部分:

.small-action.small-action-autobumped {
  display: none;
}

…然后自动顶帖消息消失了!

我还没有做其他测试,所以我不知道是否会有其他副作用。有可能 small-action-[...] 类会在应用程序的其他地方发生冲突,在这种情况下,您应该选择一个保证唯一的前缀。

3 个赞

请注意,addPostSmallActionClassesCallback 方法是上个月才添加的,因此您需要使用较新版本的 Discourse:

2 个赞

谢谢。
请详细说明最后一句“在这种情况下,您应该选择一个保证唯一的名称”。

例如,您可以使用前缀 bathinda-,这可以确保它既不会与 Discourse 中当前的内容冲突,也不会与将来的内容冲突。它看起来会是这样的:

Head

<script type="text/discourse-plugin" version="1.6.0">
  api.addPostSmallActionClassesCallback(post => {
    return ["bathinda-" + post.actionCode]
  });
</script>

CSS

.small-action.bathinda-autobumped {
  display: none;
}
2 个赞

@simonk

再次感谢。已成功创建并使用/激活了该组件。
不过,在隐藏了“自动顶帖”消息后,它看起来是这样的。

有点“不讨喜”,但总比没有/其他解决方案好。

我明白了,这是因为未隐藏的时间间隔消息。这很棘手,因为您无法使用 CSS 定位之前的元素。

1 个赞