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 代码(例如,将 < 转换为 <)。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) 删除用户。
快速提问,为什么使用 discourse?
你是说为什么*不*用 discourse 吗?
当然,这就是我的意思。
我相当确定它仍然处于测试阶段。否则,我认为这是一个很棒的选择。
它很酷,但它无法实现将整个网站整合到一个屋檐下的目标。
Discourse 看起来不错。有人尝试过吗?
谢谢。很高兴能看看你的厨房(抱歉,忍不住了),看看你为什么做出这些决定。希望你能再次享受论坛的管理工作。
这完全被抓到审核了 =)
嗨,克里斯。
在我看来,我喜欢这个“新”论坛。它看起来很干净、很新鲜:D
但我有一个关于 bbPress 登录的问题。你如何在没有丑陋的 WordPress 管理栏的情况下做到这一点?是插件吗?
我认为对于一个足够大的论坛来说,更好的方法是应用用户评论标记,当标记数量达到临界值时,帖子应该自动删除(或者,如果你担心的话,软删除,并放入版主的审查中)。
这样,你就不需要版主一直在线,也不需要有人审核帖子(这个过程可能需要几天),而是在行动之后非常快地删除垃圾邮件。
这种方法在Stack Exchange 网站上被广泛使用。(他们还有一个基于积分的声誉系统,随着时间的推移会赋予用户权限(编辑需要 2,000 分,关闭需要 3,000 分,删除需要 10,000 分,等等)。
我们想在我们的网站上使用 bbPress,但想更改背景颜色,使其更好地与主题融合。我们查看了 bbPress 插件的说明,但它们难以理解。
相比之下,您在这里提供的说明非常合理。您能告诉我们如何更改背景和框架颜色吗?
谢谢!
您应该与 Advanced Custom Fields 的 Eliott 联系。他刚刚将他的支持论坛迁移到 BBPress,并添加了一个“将此帖子标记为答案”功能。也许他愿意分享代码?
几年前我尝试过 bbPress,但被太多的垃圾邮件困住了。我最近在子域名中再次尝试,几乎没有收到任何垃圾邮件。我确实收到很多虚假注册用户,但论坛上从来没有任何帖子。我已经使用它大约 3-4 个月了,所以现在说可能还为时过早。
我从 phpBB 切换到 bbPress 也是类似的情况。我真的很喜欢将所有东西都整合在一起,但我遇到了与您相同的缺点。
我也想要一个“标记为已读”选项,它能正常工作。
我想要论坛用户拥有代码按钮,而无需启用完整的视觉编辑器。但他们需要视觉编辑器。他们也需要一个预览。
我希望您在找到这些问题的解决方案时发布一篇未来的博客文章。
嘿,克里斯!很棒的帖子,感谢你对我的用户名更改器的大力支持!
缓存问题有什么更新吗?我打算安装 bbPress,并看到很多信息表明 bbPress 和 W3TC 不兼容...这对我来说将是一个巨大的打击,因为我几乎要嫁给 W3TC 了。
谢谢!
我最近也遇到了缓存问题。这真是一个大麻烦。我现在已经关闭了 W3TC,这很糟糕。我可能会在接下来的几天内解决这个问题,因为我的 http 请求太多了。
很抱歉看到你离开 Vanilla。电子邮件验证问题已在较新的版本中得到解决,并且可以安装一些反垃圾邮件过滤器来帮助解决。我们的付费产品甚至有更多反垃圾邮件功能,包括一个基于积分的声誉系统,它限制了能力并折叠了从其他成员那里收到大量负面反应的评论。
你应该开始意识到,当你像过去几年那样让你的开源产品和社区腐烂时,这将是结果。我曾积极参与制作一些高级插件,但在尝到了这个贫血社区的味道后,我决定放弃所有工作。当然,Vanilla 可以通过出售高级产品来维护一个健康活跃的免费社区。
克里斯,你的工作很棒。现在 css-tricks 中的所有东西都用 WordPress 进行管理。
这对您和我们来说都很容易。
所以你需要一个自由职业者?:P
你是如何定制 bbPress 使人们可以创建帐户,以及当他们编辑自己的帐户时,它看起来不同的?
你好,克里斯,
如果可以的话,请问您是在运行 MU 安装吗?如果是的话,您是在单独的网站上安装 BBPress,还是将所有东西都安装在一个 WordPress 安装中?
谢谢
嗨,克里斯,
很棒的文章。我想知道您对 BBPress 的可扩展性的看法。我目前正在进行几个与 vbulletin 相关的项目。我个人无法忍受 vbulletin 作为平台。从性能角度来说,它根本不适合,而且它不是为前端开发人员设计的。您认为 BBPress 可以处理大量流量(大量 = 每天 20,000-30,000 位访问者)吗?
嗨,克里斯,
我想看看您对 tWP-markdown 的修改,拜托:-)
其次,也许您可以写一篇关于您如何设置 bbPress 的博客文章 - 您知道,所有的小细节和设置?上面的评论中提出了一些相当不错的问题,我个人认为您的做法很不错,我非常乐意看看“幕后”。
/迈克尔
使用 Facebook/Twitter/Github 登录会很酷。
刚刚在论坛上注册:) 我是 Css-tricks 的新爱好者:)
我理解将论坛和网站整合到一个屋檐下的愿望,但我发现,只要有足够的调整,就可以让 phpBB 成为一个非常可靠的垃圾邮件防御者。我有一些对策可以阻止所有垃圾邮件,除了访客帖子,不过它们会被阻止显示,除非得到批准。我也可以直接停用访客帖子,并永久阻止所有垃圾邮件。
偶尔会有一些机器人突破,但远没有以前 phpBB 那么糟糕。
我使用 phpBB 的另一个原因是它有针对您愿望清单中所有事项的附加组件。
当然,只有 bbPress 才能解决“在一个屋檐下”的问题。
自从我上次研究 bbPress 已经有一段时间了。我担心将我的 WordPress 数据库(大约 6000 篇帖子)与论坛数据库混合在一起,因为论坛数据库可能会吸引大量垃圾邮件和其他恶意行为。我不太喜欢将所有这些用户都放在同一个数据库中。我想我可能是有点偏执,因为我的网站以前被黑过。我最终不得不更换网站托管商才能清除它。您的 WordPress 数据库一定很大!您是否使用付费服务定期备份它?bbPress 是作为网络网站安装的吗?
克里斯,
很高兴听到您已经切换到 bbPress,我喜欢它!我在一个客户网站上使用 bbPress 有一段时间了(在导入器出现之前很久……我不得不映射数据并编写脚本,哎哟!)一个名叫 iMath 的老牌 BuddyPress/bbPress 贡献者开发了一个比较新的插件,它可以满足您的需求。它目前仍在测试版阶段,但已经运行良好,您可以在此处找到它 => http://wordpress.org/plugins/buddy-bbpress-support-topic/
清理旧用户不需要插件。那只是一行 SQL 代码。
我预测 bbPress 社区在未来几个月/几年内将大幅增长。
届时我将开始使用它。
感谢分享此消息。
我讨厌这样。如果您曾经看过“Buddypress”,他们也是这样构建它的。我甚至向他们提过此事,但他们完全没有注意到,也不认为这会成为问题。
感谢 Chris,这是一个好主意。我在我的网站上使用 bbPress。阅读您的帖子后,我找到了 WP-Markdown 插件并为我的网站设置了它。但它不像您说的那样运行良好。您能给我解决方案吗?我非常喜欢您的编辑器,简单而漂亮。(我的梦想:D)。非常感谢 Chris。
我即将在一个 wordpress.org 博客上实现一个 bbpress 论坛。它将取代一个将在几天内关闭的 16 年历史的论坛。我已经构建了一个测试网站,并且论坛运行良好。
在阅读您的文章之前,我不知道可以导入旧的论坛存档,感谢您提到了它的易用性。我无法直接与当前论坛的设计师联系,但它似乎与 bbpress 格式类似。我在源代码中四处查看,发现他们正在使用 cgi-bin 来拉取帖子的内容。
有人知道 cgi-bin 是否可以与 bbpress 上的此导入功能一起使用吗?我对 cgi-bin 知之甚少,只知道它是一种用于网页演示的数据库。
如果我有机会保存这 16 年的文本档案,我真的很想这样做,但我只有两天时间来解决这个问题。有什么建议吗?
谢谢
太好了。如今,bbpress 越来越受欢迎。我认为,现在是尝试一下我的一个网站的时候了。无论如何,感谢您的信息。
我也收到很多厨房垃圾邮件…….
这些天拼写成 k i t c h e n
:)
有人找到了一劳永逸地阻止它的方法吗?
我以前收到过很多这样的垃圾邮件。只需在“设置”>“讨论”>“评论审核”区域中添加一些变体,例如 http://cl.ly/UR7M
非常酷的文章,Chris。我拥有一个博客大约 8 个月了,刚刚安装了 bbpress。我仍在弄清楚所有的怪癖,并尝试使用 MyCred 插件来添加某种游戏化积分系统。这里那里有一些错误。
我想知道,您是否打算写一些关于 bbpress 的 css/html/js 自定义的帖子?或者我应该在您的 CSS 论坛中讨论这个问题?
我知道这是一个旧的帖子,我的问题可能有点跑题。如果有人注册了我的网站,希望将 bbpress 回复/帖子通知发送到与他注册的地址不同的电子邮件地址,该怎么办?有人知道这是否可行吗?其次,是否有办法在通知主题行中添加有关论坛主题的更多详细信息?我目前正在使用“bbPress 自定义主题和回复通知”插件。任何建议都将不胜感激,谢谢!
您好 - 我知道这是一个旧的帖子,但我想知道,您是否注意到在迁移后系统资源有任何变化(积极或消极)。似乎迁移到一个系统可能会降低服务器负载。是这样吗?
谢谢。我将把我的回答从空中撤下。
当我将我的 phpBB 论坛迁移到 bbPress 论坛时,它对系统资源产生了巨大的新需求。但我也是在 WordPress 多站点安装中进行此操作的。