迁移到 bbPress

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 $200 免费积分!

CSS-Tricks 上的论坛最初是使用 phpBB 在 2008 年创建的。甚至还有一个关于如何应用基本皮肤的 古老的视频。在 2010 年,我将它们迁移到 Vanilla Forums,以应对严重的垃圾邮件问题和 phpBB 的笨拙性。现在在 2013 年,论坛再次迁移,这次迁移到了 bbPress

这次迁移的灵感来自以下几点。

  • 严重的垃圾邮件问题,无处可逃。一个计划是强制实施电子邮件验证,但是该设置有一个错误,导致电子邮件永远无法验证,并一直困扰着用户。我一直找不到解决方案。
  • 我不喜欢主题。我很难弄清楚哪些文件包含哪些内容,然后当我弄清楚后,您必须将整个文件复制到您的主题并进行自定义。这使得升级变得安全,但也意味着升级没有任何作用,因为您正在覆盖任何新的更改。
  • Vanilla 社区规模很小,我发现它没有多大帮助。我相信他们都是很好的人,但我似乎无法获得我需要的帮助。
  • 此网站的各个部分都使用 WordPress 驱动,因此将所有内容整合到一个屋檐下非常有吸引力。bbPress 现在只是 WordPress 的一个插件,这意味着 CSS-Tricks 上的帐户适用于论坛、The Lodge 以及博客评论。更不用说通过 Akismet 和自定义控件进行的垃圾邮件屏蔽(我们遇到了可怕的“Kitchen”相关垃圾邮件,现在我只要将包含该词的任何新主题标记为待定)。

转换过程

bbPress 默认附带一个导入工具。它位于插件激活后的管理面板中的工具 > 论坛 > 导入论坛。

它专门与 Vanilla 以及其他几种流行的论坛软件产品一起使用。我所做的就是提供它连接到数据库所需的信息,确认我是否要导入用户,然后让它运行。

它将所有内容迁移到您的普通 WordPress 数据库中。其中有超过 100,000 个帖子,它在大约 4-5 个小时内将它们全部迁移完成。通常数据库操作速度很快,但在这种情况下,它需要这么长时间是合乎情理的。它专门一次只迁移一小部分内容,并在请求之间等待。毕竟这是一个实时网站,最好不要对它进行猛烈攻击。在迁移进行期间,我确实关闭了 Vanilla 论坛,因此不会有新的帖子被创建,以免丢失。在迁移过程中,它确实挂起了几次,但幸运的是,转换器很智能。它会在迁移过程中保存进度,当您重新启动它时,它将从上次中断的地方继续迁移。

过渡

类别完美地迁移到了新的“论坛”。转换完成后,论坛基本上就可以正常运行了。

我准备接受旧论坛 URL 会失效的事实。这有点令人沮丧,但也不算太糟糕,因为人们很少在网上链接到帖子,而且 Google 会很快更新。但是,这种情况并没有发生!

旧 URL 是这样的

https://css-tricks.org.cn/forums/discussion/23936/opinions-on-css-frameworks

而新 URL 是这样的

https://css-tricks.org.cn/forums/topic/opinions-on-css-frameworks/

这已经足够接近正则表达式了,而且 Matt Dolan 给出了解决方案

RewriteRule ^forums/discussion/[0-9]+/(.+)/?$ /forums/topic/$1/ [R=301,L]

另一个问题是用户帐户。任何拥有 Lodge 帐户(即在 Kickstarter 上支持过我或后来注册过的人)并且也拥有论坛帐户的用户都有可能在 WordPress 上使用与在 Vanilla 上相同的用户名。我的帐户也存在这个问题。

幸运的是,bbPress 导入非常智能,它会在用户名为“imported__OLD_USERNAME”的情况下创建新用户。例如

如果用户对这种情况有任何疑问,我可以轻松地解决它。我只需删除“imported_”用户,并将所有帖子归属于旧用户。

此外,还存在一个 用于更改用户名的插件,如果有人想要更改用户名,可以使用它。


密码是最后的一个问题。当然,密码是加密的,因此无法从一个系统导入到另一个系统。我在论坛中发布了一则通知,告知人们如果他们无法登录,只需重置密码即可,这很正常(也是预期情况)。

使用 Markdown

为什么要使用 Markdown 作为用户编写评论、回复和新主题的语言?原因有很多。在任何允许用户编写并发布他们所写内容的系统中,您至少需要一些自动段落功能。如果用户输入大量文本,然后回车两次,您将希望将其显示为两个段落。WordPress 有 autop,但 Markdown 也具备此功能。

Markdown 更明显的优势在于它使您可以更轻松地“直接输入”回复。将 *星号放在 *周围* 来斜体/强调某些内容,或将 **内容** 加粗。链接只需 [link](url) 即可。引号只需以 > 开头的段落即可。

但对我来说,非常重要的是代码转义。人们会在评论和论坛中发布大量的 HTML 代码。他们不必为了发布而转义所有这些 HTML 代码(例如,将 < 转换为 &lt;)。Markdown 会自动转义您有意指定为代码的代码(例如,它位于 `反引号` 之间或缩进 4 个空格)。这非常有用。

再加上 WordPress 的通用安全功能(例如,剥离 <script> 标签),这形成了一个非常不错的系统。

我使用的是 WP-Markdown 插件,它是由 Stephen Harris 开发的,可以在评论和 bbPress 中使用。最后我发现我的设置中存在一些错误,因此在 Justin Sainton 的帮助下,它才完美地运行起来。截至目前,Markdown 中的列表还有一个很小的错误需要解决,但解决完这个问题后,如果需要,我可以向任何人发送经过修补的 WP-Markdown 版本。Stephen 了解这些更改,并认为它们可能不适合公开版本。

迁移后的情况

发布后,一个主要的错误是登录问题,用户登录后会更改页面,然后似乎被注销了(如这里演示)。在我看来,这似乎是一个缓存问题。我使用 W3 Total Cache 进行缓存,但我将其设置为不缓存论坛中的任何内容或任何已登录用户的任何内容。

到目前为止,我最好的猜测是它是由浏览器级别的缓存造成的。我在 .htaccess 文件中发现了以下内容

ExpiresByType text/html A3600

…它是页面提供服务时文档的 content-type。因此,浏览器试图保留该页面是有道理的。我将其删除了,但这看起来是 W3 Total Cache 默认添加的内容,因此在更改这些设置时,它会重新添加。我会看看他们对此有什么想法。


第二天,又出现了一堆“Kitchen”垃圾邮件,这让我很惊讶。这告诉我垃圾邮件发送者很有可能是真人,这也解释了他们是如何轻松绕过 CAPTCHA 的。

我所要做的就是进入设置 > 讨论 > 评论审核,将这些词输入其中,垃圾邮件就几乎消失了。

未来

我希望通过插件添加各种功能,并且正在寻找愿意将这些功能作为自由职业项目进行开发的人。

  • 修改 WP-Markdown 以支持 GitHub 风格的 Markdown。
  • 一个插件,允许主题的原始发布者(或管理员)将特定回复标记为“答案”。该回复将获得一个特殊的类,以便可以对其进行样式设置,并且主题本身在论坛列表中显示时将获得一个特殊的类,以便可以将其标记为“已解决”。
  • 修改一个“标记为已读”插件,使您可以 1) 将所有内容标记为已读,2) 在打开主题时自动将其标记为已读。
  • 修改 特色评论插件,使其也适用于 bbPress。
  • 一个插件,当用户在回复中被 @回复时,会向他们发送电子邮件通知。
  • 一个插件,用于“清理用户”——例如,自动删除 1) 在网站上没有关联帖子的用户,2) 在 X 时间内没有登录的用户,3) 没有 Gravatar 的用户。这将清理掉我有很多垃圾邮件用户。
  • 一个插件,允许任何用户“举报此主题”——如果它是垃圾邮件或不适当的内容。
  • 某种方法允许论坛版主查看需要审核的帖子的“待定”队列,并发布/删除/标记为垃圾邮件。
  • 一个“核弹”插件——当管理员看到垃圾邮件帖子时,他们可以将其“核弹”掉,这将 1) 删除帖子,2) 删除用户发布的其他所有内容,3) 删除用户。