问题描述

我目前正在编写一个带有自定义帖子和几个功能的 simple-ish 插件,使用后置元数据并将几个变量添加到数据库中的”options” 表。在我的研究中,我在 WP Codex 中看到了一些关于使插件向后兼容 WP 3.x 之前的版本的引用,我只是想知道现在加入该兼容性有多重要。

例如,我曾经看到的 (由客户端) 安装的最旧版本的 WP 是 3.2,或者在那里的某个地方。我不能想像很多人的年龄大于 3.x,但我可能是错的。我知道理论上你应该总是试图让它完全兼容,但实际上,有谁知道包含这个能力有多重要?

谢谢

最佳解决方案

始终为当前版本编写插件,并保留即将推出的版本的夜间版本。别的没关系。

编辑 As @toscho 在评论中指出:

可能有一些解释为什么要这样。

  1. 因为我这样说

  2. 插件只需要符合核心,因为如果所有人都遵守规则,没有任何事情会失败。如果一个插件不符合规则,那么它有一个错误。而这个 bug 需要修复,而不是其他任何东西,而不是另一个插件或主题。

  3. 没有更新 WordPress 的用户是使用的 bug 插件的结果,在没有大量工作的系统中不能被遗弃。如 (2) 所写,这是你不必关心的错误。错误需要修复,而不是您的插件考虑到第三方代码。

  4. Legacy Code 不需要支持。需要更换不是你的问题

  5. 事情在主要 X.X 版本上大幅改变。当您尝试支持以前的版本时,您通常需要不同的解决方法和许多版本检查。那就是 (a) 维护噩梦 (b) 增加代码库 (c) 使得单元测试不可能在一个版本上运行 – 而不是更少,而不是更多,最后 (d) 减少服务器磁盘空间和性能在大多数情况下) 。

  6. WordPress 已经有一个非常旧的代码库,在很多边和角落都缺少改进。简而言之:WordPress 是旧的,使用不再受支持的 PHP 版本作为最低限度,因此您已经支持以前的版本低于应用程序的公共 API 。

现在去问问自己:

When you’re already supporting an no longer supported PHP version, why would you want to support an application that isn’t even supported by its creators?

次佳解决方案

记住发布 WordPress 3.0 所需的 PHP5 。当时很多托管公司还没有在他们的服务器上运行 PHP5 。所以有一段时间,一些 WordPress 网站可能不更新到 WordPress 3.0,因为他们的托管公司没有保持他们的服务器是最新的。

自从 WordPress 3.0 发行以来,已经有很多年了 (3+),因此向后兼容 WordPress< 3.x 不是很常见的插件。

第三种解决方案

大多数 WordPress 安装 are outdated 。目前,所有安装中只有 5.2%在最新版本 3.6 上运行。 27.3%仍在版本 3.0 。

您可能认为您必须使用兼容的代码来支持这些旧版本。但想想这个含义:

  • 您必须测试所有正式支持的版本。

  • 您必须处理不兼容的 API,例如媒体上传器,其在 3.5 中发生了巨大变化。

  • 你让你的用户认为升级 WordPress 是没问题的,因为它仍然可以工作。

  • 你需要更多的代码,更多的测试和更多的时间来支持做同样的事情。

而且这些用户可能甚至不会安装您的插件,因为他们知道已经有新插件破坏了他们的网站。在市场覆盖面方面,您可能会用向后兼容的代码赢得一点点。在你失去的效率方面。

第四种方案

我写的插件的经验法则是支持当前版本减 1,所以我写的所有插件都将与 3.6.x 和 3.5.x 兼容。虽然特定的插件可能适用于早期版本,但如果遇到问题,我不保证它也不支持它。

第五种方案

四个月前,我接手维护一个流行的插件。在开始工作之前,该插件在 2 年内没有更新。我做了一堆错误修复,发布了新版本,2 天后,从一个家伙说,新版本导致他的网站上的 white-screen-of 死亡。在我查看之后,他仍然运行 WordPress 2.9.2,而我的更新使用了 3.0 中引入的 home_url 功能。我不知道为什么这个人决定立即更新这个插件,尽管他在 3 年内没有更新他的 WordPress 安装。当我制作新版本时,我从来没有想过要测试 WordPress 2.9.2 。

这是道德的故事:在你的插件的 readme.txt 文件中,在标题中有一个 「至少需要」 版本号。用它。当您进行更新时,如果您不想测试旧版本,请增加它。这将阻止用户拒绝更新他们的 WordPress 安装更新您的插件。

我正在编写一个新的相关的插件,而我正在计划使它成为 WordPress 3.6,因为我想使用包含在核心中的 getid3 库。我不希望为旧的核心版本发布一个新的插件。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。