WordPress 自定义帖子类型辩论 – Functions.php 还是插件?

众所周知,上周 Syed Balkhi 参加了 WordCamp Raleigh 2012。在活动期间,他的一条推文引发了相当大的争论。在本文中,我们的创始人 Syed Balkhi 将讨论 WordPress 自定义帖子类型是属于 functions.php 文件还是插件。以下是引发这场辩论的推文:

推文发布后,WordPress 社区中的许多知名人士纷纷加入。您可以在此处查看完整对话。Curtis McHale 更进一步,并在他的新博文中详细阐述了该主题。

来自推特的对话带来了一些重要的观点。

论据摘要

插件参数:即使更改主题,用户也将始终拥有数据。它可能看起来不那么漂亮,但它会留在那里。

Functions.php 参数:没有设计的数据将是无关紧要的。它会让用户更加困惑。

你更同意哪一方?显然双方都有自己的问题,但两害相权取其轻?

这就是为什么我们认为自定义帖子类型应该始终存在于特定于站点的插件或完全单独的插件中。

长寿数据

自定义帖子类型是数据。在大多数情况下,您的数据将比当前设计更有效。几次改变我们的主题后,我们清楚地理解了这一说法。帖子、页面、链接、附件和修订都是 WordPress 内置的所有类型的帖子类型。最重要的是,我们有书籍、推荐、交易等帖子类型。现在你能想象如果我们改变一个主题并让所有这些都消失吗?当然,我们不希望这种情况发生。

在我们的团队中有开发人员,这应该无关紧要。考虑到我们所有的主题都是由我们的团队定制设计的,它真的有什么不同?秘诀在于两个词:时间和中心化。只要我们拥有所有必要的数据,我们未来要做的就是改变样式。我们不必担心每次都将函数从一个文件复制和粘贴到另一个文件。如果要复制功能怎么办?只需将插件放入您的新站点即可。改变样式,你就完成了。

规则和标准

当您像我们在推文中那样使用“始终”这个词时,它可能意味着规则和标准。规则和标准都是为大多数人制定的。总会有规则被扭曲和标准被打破的特殊情况,但这并不意味着我们应该完全摆脱标准。

有大量的通用帖子类型大多需要相同的附加元字段集。想到的一些例子是:行情、书籍、食谱、推荐、投资组合等。

考虑到免费和商业市场上有大量摄影和作品集主题,让用户在每次更改主题时重新输入所有自定义帖子类型信息几乎没有任何意义。让我们看一个示例案例场景:

摄影师– 用户设置具有博客功能的 WordPress(默认“发布”CPT)。他想添加他的作品集(需要 Portfolio CPT)。他想展示客户推荐(需要推荐 CPT)。所有这些信息肯定会超越主题设计。一年后,用户想要改变他的网站的外观并给它一个刷新。查找具有所有类似功能的新主题。他切换主题的那一刻,BOOM。他之前输入的所有数据都消失了。有一个名为 Portfolio 的菜单和一个名为 Testimonials 的菜单,但是那里没有任何数据。用户认为“天哪,我丢失了所有内容”。在论坛中创建新的支持问题。向 WPBeginner 等网站发送电子邮件。如果他们没有收到好的回复,他们将不得不重新输入所有数据。这是一个糟糕的用户体验。

那么我们如何解决这个问题呢?

可能的解决方案?

我们创建了一个新的标准基础。Justin Tadlock 不久前已经通过创建一个基本的投资组合插件来解决这个问题。它会成为每个人的完美解决方案吗?不,但它适用于大多数人。

正如贾斯汀在他的帖子中所问的那样,投资组合插件中应该包含哪些标准字段(指帖子元)。这种类型的对话需要在他们的主题中创建类似功能的开发人员之间进行。当可以通过插件完成时,为什么要一遍又一遍地将相同的内容从一个主题复制并粘贴到另一个主题?一旦它成为标准,其他主题作者将开始适应它。

例如,我们看到在Genesis 等 WordPress 主题框架中对Gravity Forms的样式支持有所增加。为什么?因为他们知道他们的用户正在使用它。

有一些强大的 WordPress 主题带有我们认为应该是插件的功能。工作委员会主题、问题跟踪主题、分类广告主题、房地产主题等。它们都应该由基本插件提供支持。WooCommerce 已经在发生这种情况。WooThemes 已经发布了许多为插件提供内置样式支持的主题。其他主题公司也承诺发布基于 WooCommerce 的电子商务主题。您可以从一个主题切换到另一个主题,并保持所有产品不变。这几乎就像主题改变了,但一切都恰到好处。这就是我们需要争取的主题转换体验。

为什么不对 Portfolio、Testimonials 和其他通用自定义帖子类型做同样的事情呢?是因为它太简单了,而电子商务是一头难以征服的野兽?显然,与其他领域相比,电子商务的领域太多了,因此这些通用帖子类型应该更容易。这只是有意识地努力使事情变得更好的问题。

看看ReciPress 插件。它创建了一个带有配方字段的自定义元框,并将其附加到帖子中。但是,可以使用自定义帖子类型附加它。使用此插件的任何人都可以更改主题,而无需经历这样的麻烦。

很高兴看到像 AgentPress 这样的主题由集中式基础插件提供支持。很高兴看到不断变化的主题的过渡变得更容易。例如,如果用户从一个摄影主题切换到另一个主题,则不应该是混乱的。可能会发生小错误,但至少在更大的范围内,事情会奏效。

您始终可以提供为一次性客户使用而创建的超级定制帖子类型的示例,但这是例外而不是规则。

大家对这个话题怎么看?自定义帖子类型代码应该放在哪里?在functions.php文件或插件中?