WB Polls

创建投票,让访客或会员投一次票,并在站点的任何位置显示实时结果。

插件

WB Polls

创建投票,让访客或会员投一次票,并在站点的任何位置显示实时结果。

  • 分类: polls
  • 状态: 可用
  • 版本: 0.5.0
  • 价格: 未知
  • 来源: 官方插件注册表
  • 安装方式: 注册表沙盒插件
  • 核实日期: 2026-10-21

描述

WB Polls 让站点所有者提出一个问题,并在任何 EmDash 页面上显示实时结果。

你将获得

  • 创建带有两到十个选项的投票,可单选或多选。
  • 准备好时开启,需要停止投票时关闭,或设置关闭时间。
  • 选择谁可以投票:任何人,或仅限已登录的会员。
  • 选择结果的显示时机:始终显示、投票后显示,或投票关闭后显示。
  • 选择匿名汇总,或站点所有者可见的实名结果。
  • 把投票附加到某一个页面、某种内容类型的每一条内容,或整个站点。开发者也可以按 id 放置特定的投票。
  • 把投票复制成一份没有票数的新草稿。

它们如何协同工作

插件是引擎:存储、投票路由和管理界面。EmDash 插件无法添加页面,因此可见的投票以站点套件的形式提供,你只需复制一次。参见安装。

当你允许任何人投票,且你的主机把访客的地址提供给 EmDash(Cloudflare,或 trustedProxyHeaders)时,访客可以投票。会员以其已登录的账户投票。只有你可以创建和管理投票。

安装

安装之前

1. 你的站点需要沙盒运行器。 注册表插件在沙盒中运行。在站点配置好之前,Admin、Plugins 会显示 “No plugins configured”,菜单中也没有 Registry。

  • Node: 在你的站点中运行 npm install @emdash-cms/sandbox-workerd workerd,然后在 astro.config.mjs 的 emdash() 内添加 sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox",。
  • Cloudflare: 添加 import from "@emdash-cms/cloudflare"; 和 sandboxRunner: sandbox(),。这需要 Workers Paid 套餐、名为 LOADER 的 worker_loaders 绑定(在你的 Wrangler 配置中取消注释)以及作为 storage: r2(...) 的 R2 存储桶,否则安装会因 “Storage error while installing plugin” 而停止。然后运行 npm run deploy。

停止开发服务器并重新启动。Registry 现在会显示在管理菜单中。

2. 插件是引擎。访客页面来自它的站点套件。 注册表插件无法向你的站点添加页面。在你复制套件之前,它的地址(例如 /account/votes)会显示你站点的 404 页面。这是正常的。下面复制套件只需一条命令。

已在 EmDash 1.3.1 上使用 blog 模板验证,涵盖 Node 和 Cloudflare Workers(注册表安装)。

安装步骤

  1. Admin、Registry,搜索 WB Polls,Install,然后接受权限。

  2. 在你站点的根文件夹中:

    kit="$(mktemp -d)" &&
      git clone --depth 1 \
        --branch v0.5.0 \
        https://github.com/wbcomdesigns/emdash-polls \
        "$kit/emdash-polls" &&
      "$kit/emdash-polls/scripts/add-to-site.sh" .
  3. 粘贴它打印出的那几行。重启开发服务器。

  4. 在 Admin、Menus 中添加它打印出的菜单链接。

  5. 在管理后台打开 Polls。

更新后,使用新标签再次运行第 2 步。

指南:https://github.com/wbcomdesigns/emdash-polls/blob/v0.5.0/docs/website/getting-started/install.md

常见问题

我更新了插件,结果投票停止了。 请再次复制站点套件。注册表安装通过一个 id 响应,而不是 /polls/。当前的套件能找到这个 id。

为什么我创建投票后页面上没有显示? 创建出来的是草稿。从列表中打开该投票。然后把它附加到页面、内容类型或整个站点,并在该模板上放置一个投票位。

访客可以投票吗? 可以,前提是你把 Who can vote 设置为 Anyone,并且主机把访客的地址提供给 EmDash:在 Cloudflare 上,或把 trustedProxyHeaders 设置为由你的代理自己写入并替换的标头(在 nginx 后面用 x-real-ip;绝不要用追加式的 X-Forwarded-For)。否则,访客会被要求登录,Polls 界面也会这样提示。每位访客一票。已登录的会员以自己的身份投票。

浏览器控制台中的 401 有问题吗? 没有。访客在每个投票上会因会员投票检查收到一次 401,在 My votes 上也会收到一次。投票就是这样得知访客尚未登录,然后显示访客视图。

谁能看到投票者的姓名? 只有你,而且只限实名投票。访客保持匿名。匿名投票从不保存姓名。

它支持深色模式吗? 支持。套件会跟随访客的系统设置。

我能把投票放在文章中间吗? 注册表安装不行。请把它附加在内容上方或下方,或在模板中放置 “。文中区块需要受信任的安装;该路径是可选的,不会改变注册表产品。

有付费版本吗? 没有。这里的一切都是免费的。

为什么它要求读取我的内容? 这样,附加在草稿上的投票会保持隐藏,直到你发布该页面。WB Polls 只会检查页面是否已发布,并按名称列出你的内容类型。

更新日志

0.5.0

现在,每个投票页面、投票操作和管理界面都符合 Cloudflare 每次插件调用最多 10 个请求的限制。

  • 新增 - 每个投票都会保留一个累计总数,因此无论投票规模多大,结果都只需一次读取即可显示。
  • 新增 - Results 提供 Recount votes,可根据已存储的票数重新统计投票。
  • 改进 - 删除投票会立即将其隐藏;其票数(包括姓名)会在你打开管理界面时被清除。
  • 改进 - 开启和关闭时间在每次查看时都从投票的日期中读取。
  • 修复 - 在 Cloudflare 上,访客投票保存后不再显示 “Something went wrong”。
  • 修复 - 在 Cloudflare 上,Polls 界面、Results、My votes 和 Poll 面板在繁忙的站点上不再失败。

早期版本的投票会在第一次打开时重新统计。更新后,请在站点根文件夹中再次复制套件:

kit="$(mktemp -d)" &&
  git clone --depth 1 \
    --branch v0.5.0 \
    https://github.com/wbcomdesigns/emdash-polls \
    "$kit/emdash-polls" &&
  "$kit/emdash-polls/scripts/add-to-site.sh" .

0.4.0

  • 新增:Read your content 权限,使草稿页面上的投票在你发布之前保持隐藏。
  • 新增:Set up visitor pages 卡片和 scripts/add-to-site.sh,一条命令即可复制套件。
  • 安全:只有在主机提供访客地址的情况下,访客才能投票。同一位投票者同时发出的两次投票只算一次。

0.3.0

  • 新增:列表上的投票统计、结果条形图,以及可选的用于文章正文的 This page’s poll 区块。

早期版本:https://github.com/wbcomdesigns/emdash-polls/blob/main/CHANGELOG.md