使用查询字符串筛选主题视图

:bookmark: 本指南介绍如何使用查询字符串在任意 Discourse 站点获取自定义筛选的主题视图。所有用户均可使用查询字符串来查看特定主题列表、创建指向唯一主题列表的自定义链接,以及搜索符合特定条件的主题。

:person_raising_hand: 所需用户等级:所有用户

查询字符串是可以附加到大多数 Discourse URL 末尾的文本,用于获取自定义筛选的主题视图。它们可用于查看特定主题列表、创建指向唯一主题列表的自定义链接,以及搜索符合特定条件的主题。

理解查询字符串

查询字符串添加在 URL 末尾,以问号 (?) 开头,后跟参数及其值。例如:

https://meta.discourse.org/?status=open

在此 URL 中,?status=open 即为查询字符串。

使用查询字符串时,您看到的主题列表仍仅限于您的用户账户可访问的主题。使用查询字符串无需启用任何设置。

可用的查询字符串参数

以下是所有 Discourse 站点均可使用的查询字符串参数:

状态

使用 ?status=_ 显示具有特定状态的主题:

  • open:仅显示开放主题
  • closed:仅显示已关闭主题
  • archived:仅显示已归档主题
  • listed:仅显示已列出(可见)主题
  • unlisted:仅显示未列出主题
  • deleted:仅显示已删除主题
  • public:仅显示公共(非阅读受限)分类中的主题

搜索

使用 ?search=_ 创建完整的搜索结果页面。将 _ 替换为您的搜索词。

状态(用户设置)

使用 ?state=_ 显示具有特定状态的主题:

  • muted:显示您已屏蔽的主题
  • normal:显示您已设为正常的主题
  • tracking:显示您正在跟踪的主题
  • watching:显示您正在关注的主题
  • watching_first_post:显示您已设置关注首帖的分类或标签中的主题

升序排列

使用 ?ascending=true 按日期升序显示主题。默认为降序。

排序

使用 ?order=_ 按各种条件以降序显示主题:

  • likes:按点赞数
  • op_likes:按原始帖子的点赞数
  • views:按浏览量
  • posts:按帖子数(回复数)
  • activity:按最后活动时间(包含 bumped_at 时间)
  • posters:按参与者数量
  • category:按分类名称(Z-A)
  • created:按主题创建日期(最新主题优先)

帖子数筛选

  • ?max_posts=_:返回帖子数小于或等于 _ 的主题
  • ?min_posts=_:返回帖子数大于或等于 _ 的主题

年龄筛选

  • ?before=_:返回创建时间超过 _ 天前的主题
  • ?bumped_before=_:返回最后被顶起时间超过 _ 天前的主题

主题 ID

使用 ?topic_ids=_ 显示具有特定 ID 的主题列表。接受以逗号分隔的主题 ID 字符串。

分类

使用 ?category=_ 显示特定分类的主题列表。接受以逗号分隔的分类 ID 数字字符串。

使用 ?no_subcategories=true 在按分类筛选时排除子分类中的主题。

标签

使用 ?tags=_ 按标签筛选主题。例如,https://meta.discourse.org/?tags=how-to 将显示所有带有 how-to 标签的主题。

结合 ?tags=_ 使用 ?match_all_tags=true,可要求主题必须包含所有指定标签(而非任意一个)。

使用 ?no_tags=true 仅显示没有任何标签的主题。

使用 ?exclude_tag=_ 排除带有特定标签的主题。

点赞筛选

使用 ?f=liked 仅显示当前用户已点赞过帖子的主题。

插件特定参数

某些插件会添加额外的查询字符串参数:

Solved 插件

如果您已安装 Solved 插件:

  • ?solved=yes:显示已解决的主题
  • ?solved=no:显示未解决的主题

Assign 插件

如果您已安装 Assign 插件:

  • ?assigned=username:查看分配给特定用户的所有主题
  • ?assigned=*:查看所有用户被分配的主题
  • ?assigned=me:查看分配给当前用户的所有主题
  • ?assigned=nobody:查看所有未分配的主题

组合查询字符串

您可以使用符号 & 组合多个查询字符串。使用多个查询字符串时,仅第一个参数需要 ? 符号。例如:

https://meta.discourse.org/?max_posts=1&status=closed

此 URL 将显示仅有一条帖子的已关闭主题。

使用高级搜索页面

您也可以使用高级搜索页面,通过图形用户界面构建这些 URL,然后复制生成的 URL。请注意,某些搜索过滤器在搜索上下文之外作为查询字符串参数可能无法正常工作。

其他资源

18 个赞

您不能使用高级搜索页面通过 GUI 构建这些 URL,然后只复制 URL 吗?

1 个赞

看起来它们是相同的参数(我们只需要将搜索过滤器中的 : 替换为查询字符串中的 =),但有些搜索过滤器在用作搜索外部的查询字符串参数时不起作用。

所以我相信完整的列表在此文档中。不过,我很想知道它们在哪个 Discourse 文件中被引用,以确保这一点。

编辑:现在有一个 /filter 路由,其中包含更多过滤条件:

3 个赞

如果您安装了 Solved 插件,您还可以使用:

?solved=yes
?solved=no

3 个赞

我认为也有一些关于 Assign 的内容:

我会把它们加进去。:+1:

3 个赞

猜猜看,您也可以将此用于标签?

太棒了,如何操作

2 个赞

是的,您可以将 ?tags=_ 追加到 Discourse URL 中,使用查询字符串来过滤标签。

例如,https://meta.discourse.org/?tags=how-to 将会引导您到 Meta 上所有的 how-to 标签。

2 个赞

是否可以使用查询字符串进行负面(排除)过滤?目前,使用高级搜索是通过在前面加上 - 来完成的:

-tags: smth 但这在查询字符串中是不可能的。

使用新的 /filter 路由绝对可以实现这一点。

例如 https://meta.discourse.org/filter?q=-tags%3Aofficial%20%20category%3Aplugin

3 个赞

谢谢!那如何进行多状态(OR)搜索呢?我尝试了几种搜索方式,但似乎都不支持。例如,我有一些主题,它们的状态可能是“打开”、“关闭”或“存档”,我只想排除“存档”状态,即搜索“打开”或“关闭”。到目前为止,我尝试了:

  • 高级搜索:status:open,closed
  • 高级搜索:status:open status:closed
  • 查询字符串:?status=open,closed

但它们都不起作用。