# 新增事件：为话题过滤查询语言添加过滤器（Discourse Events 插件扩展）

**URL:** <https://meta.discourse.org/t/add-event-filter-to-the-topic-filter-query-language-discourse-events-plugin-extension/415803>\
**Category:** Feature\
**Tags:** events, completed, topic-filter\
**Created:** [2026 年10 月 26 日 21:08 UTC](https://meta.discourse.org/t/add-event-filter-to-the-topic-filter-query-language-discourse-events-plugin-extension/415803 "2026-10-26T21:08:54Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

作者： ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)\
发布日期： [2026 年10 月 26 日 21:08 UTC](https://meta.discourse.org/t/add-event-filter-to-the-topic-filter-query-language-discourse-events-plugin-extension/415803/1 "2026-10-26T21:08:54Z")

</div>

> ℹ 这将允许通过 `/filter` 路由和 Custom Topic Lists 插件，筛选出那些通过 Events 插件关联了事件的帖子。

## 问题所在

[Discourse Events 插件](https://meta.discourse.org/t/discourse-calendar-and-event/97376) 创建了丰富的活动帖子，但目前无法使用 [帖子筛选查询语言](https://meta.discourse.org/t/filtering-topic-lists-in-discourse/375558) 将它们与非活动帖子隔离开来。

现有的变通方法都存在缺点：

- `/upcoming-events` 路由以日历形式显示活动，而不是可筛选的帖子列表——尽管它本应该如此！！！
- [Events Calendar on Custom Lists](https://meta.discourse.org/t/events-calendar-on-custom-lists/415039) 主题组件有一个客户端的“仅显示带有活动的帖子”设置，但它是在列表加载 _之后_ 才生效的——它不是真正的服务器端筛选，与分页功能配合不佳，且行为可能不一致。
- 基于约定的方法（专用分类、必需标签）需要严格的内容管理纪律。

## 提议的解决方案

Events 插件应扩展帖子筛选 DSL，增加一个 `event:` 筛选器，遵循 [Solved 插件](https://meta.discourse.org/t/filtering-topic-lists-in-discourse/375558)（`status:solved` / `status:unsolved`）和 [Assign 插件](https://meta.discourse.org/t/using-query-strings-to-filter-topic-views/248224)（`?assigned=username`）已经使用的相同模式。

#### 语法示例：

```plaintext
event:yes # 附带事件的帖子
event:no # 未附带事件的帖子（通过 -event:yes 实现）
-category:announcements event:yes # 公告分类之外的活动
tag:meetup event:yes order:created # 标记为 meetup 且附带事件的帖子，按最新排序

```

为了与现有的 `status:` 命名空间保持一致，也可以考虑引入 `status:events` 变体，但对于主要用例而言，`event:` 读起来更自然。

## 为什么这是正确的层级

筛选文档明确指出：

> [@sam](#):
>
> - 该功能支持插件扩展以添加自定义筛选器

Events 插件已经在专用表中存储了结构化的活动数据（开始日期、结束日期、状态、RSVP）。服务器端筛选可以高效地查询这些数据——这是客户端组件根本无法做到的。

## 用例示例

作为一名社区管理员，我希望拥有一个可共享的 URL——可以在侧边栏中链接、通过 Custom Topic Lists 嵌入，并可在 [Filtered Topic Lists](https://meta.discourse.org/t/filtered-topic-lists/321031) 主题组件中使用——该 URL 能够可靠地显示 **所有分类中附带事件的帖子** ，并按活动日期排序。

目前，我无法自信地构建这样的查询。如果有了 `event:` 筛选器，我可以：

```plaintext
event:yes order:created

```

……从而获得一个干净的、支持分页的、具备权限感知功能的帖子列表，展示我站点上的所有活动。

* * *

## 相关话题

- [Filtering topic lists in Discourse](https://meta.discourse.org/t/filtering-topic-lists-in-discourse/375558)
- [Events Calendar on Custom Lists](https://meta.discourse.org/t/events-calendar-on-custom-lists/415039)
- [The /upcoming-events url should include a topic list](https://meta.discourse.org/t/the-upcoming-events-url-should-include-a-topic-list/272063)

---

_[View the full topic](https://meta.discourse.org/t/add-event-filter-to-the-topic-filter-query-language-discourse-events-plugin-extension/415803)._
