跳到正文
原文
Advanced Custom Fields 官方博客· Iain Poulson·· 6 天前编辑评分32

Advanced Custom Fields 与 Meta Box:开发者只能二选一时如何抉择

ACF vs. Meta Box for Developers Who Have to Pick One

编辑导读

对于需要在多个客户 WordPress 项目中统一内容建模方案的开发者,Advanced Custom Fields(ACF)凭借一致的字段组工作流、熟悉的 API 和可复用配置,成为更稳妥的默认选择。

要点:

  • Advanced Custom Fields (ACF®) 是大多数代理公司和客户 WordPress 项目的首选默认方案——其以字段组为核心的工作流在自定义字段、CPT、分类法、区块、API 以及不同的前端架构之间保持一致。
  • ACF 能在各种开发工作流之间提供更广泛的连续性——同一内容模型可同时支持 PHP 模板、ACF Blocks、页面构建器、REST、WPGraphQL、Local JSON、Git 和基于 WP-CLI 的部署。
  • 对于希望采用一套技术栈并在多个项目间实现标准化的代理公司而言,ACF 更便于在不同项目之间延续。其一致的 PRO 功能集、熟悉的 API 和可复用的配置工作流,减少了为每个项目单独决定工具方案的需要。
  • Meta Box 在满足特定架构需求时具有优势,而对于典型的代理公司工作,ACF 仍是更优选择。

在 Advanced Custom Fields (ACF®) 与 Meta Box 之间做选择,其实并不取决于哪个插件拥有更多字段类型。两者都能支持复杂精细的 WordPress®1 内容模型,包括自定义字段、文章类型、分类法、关系和可视化配置工作流。

更棘手的问题是,哪一个应当成为未来项目中的默认依赖项。这一选择会影响开发者如何建模数据、如何在团队之间移交项目、如何将内容与不同的前端集成,以及如何从一个客户站点到下一个客户站点保持相同的开发规范。

这篇 ACF 与 Meta Box 的对比重点考察这些差异:数据架构、关系、开发者工作流、生态系统适配性、版本控制和许可。对于大多数客户和代理公司项目,ACF 是更站得住脚的默认选择,原因如下所述。

使用 ACF PRO,以高级功能增强您的网站

借助 ACF Blocks 和 Options Pages 加快工作流并解锁功能,以更好地开发网站,还支持 Flexible Content、Repeater、 Clone、Gallery Fields 等。

探索功能 查看定价

PRO 功能

ACF Blocks

Options Pages

PRO 字段

Repeater

Flexible Content

Gallery

Clone

Meta Box 与 WordPress 元框有什么区别?

Meta Box 是一个用于在 WordPress 软件上运行的内容建模框架,而 WordPress 元框则是通过 WordPress 软件本身注册的编辑器界面容器。相似的名称描述的是两种不同的东西。本文重点比较 ACF 和 Meta Box,而不是将二者分别与 WordPress 元框进行比较。 

WordPress 核心提供 add_meta_box() API,用于向编辑界面添加元框。开发者可以在该元框内放置控件,并处理这些控件所收集的数据。换句话说,元框是管理界面的一部分,而非一款与之竞争的自定义字段产品。

相比之下,Meta Box 是用于构建结构化 WordPress 站点的第三方框架。其工具涵盖自定义字段和文章类型,还支持关系、设置页面、区块和自定义表存储等能力。

如果您的目标只是自行构建一个 WordPress 元框,那么 ACF 的 《如何在 WordPress 中添加自定义元框》教程 同时介绍了 ACF 和自定义代码两种方法。

开发者应该选择 ACF 还是 Meta Box?

对于希望在不同客户的 WordPress 项目中统一采用一种内容建模方案的开发者而言,ACF 是更合适的默认选择。代理机构需要一个内容建模层,以便在项目需求、前端、编辑器和开发者发生变化时仍保持一致。

在以下情况下默认选择 ACF:

  • 您为客户或代理机构构建网站,并希望不同项目采用相同的内容建模规范。
  • 开发者和编辑需要统一的工作流来创建和管理结构化内容。
  • 自定义字段与 CPT、分类法、模板、区块或第三方集成并存。ACF 可以直接注册 CPT 和分类法,并通过统一的开发者 API 公开其字段数据。
  • 另一位开发者可能会接手项目,因此既定的规范和可预测的内容模型尤其有价值。统一字段组、API 和配置,可以减少另一位开发者需要学习的项目特定模式。
  • 您的代理机构会构建不同类型的 WordPress 网站。当一个项目使用传统的 PHP 模板,而另一个项目后来需要区块、可视化构建器或无头前端时,统一的底层内容建模层非常有价值。

至于 Meta Box: 

  • MB Custom Table 可以将选定字段存储在专用表中,字段 ID 映射到各列,对象的值则存储在同一行中。 
  • MB Relationships 将关联关系存储在其自己的 mb_relationships 表中,这适合围绕该模型设计的项目。已经统一采用 Meta Box 扩展生态的团队,同样可能没有充分理由替换它。

以上是选择 Meta Box 的具体架构或组织层面的原因。对于希望在广泛的客户组合中采用一种适应性默认方案的代理机构,ACF 提供了更直接的基础。

以下是 ACF 与 Meta Box 的快速对比:

ACFMeta Box最适合
可视化字段、CPT 和分类法构建器统一的字段组工作流,可注册 CPT、分类法和选项页面。通过 Meta Box Lite 提供可视化构建器——基础框架仅支持代码。如需在不同项目中保持一致,选择 ACF。
字段数据存储标准 WordPress 元数据。WordPress 元数据,或通过 MB Custom Table 存储在专用表中。ACF 和 Meta Box 均可。
关联关系Relationship、Post Object、User 和 Taxonomy 字段原生支持双向更新。通过 MB Relationships 使用专用 mb_relationships 表。ACF 和 Meta Box 均可。
可重复内容专用的 Repeater 和 Flexible Content 字段(ACF PRO)。可克隆的字段和字段组。如需明确区分重复内容与布局模型,选择 ACF。
区块、构建器和 APIACF Blocks(Block API v3)、支持 Bricks 和 Elementor、REST,以及面向 ACF 的 WPGraphQL。MB Blocks 和 MB REST API——没有官方 WPGraphQL 扩展。如需 GraphQL 和无头复用,选择 ACF。
Git 与部署字段、CPT、分类法和选项页面支持本地 JSON,另提供 WP-CLI(ACF 6.8)。本地 JSON(mb-json)和代码优先的 PHP 工作流。如需在众多网站中实施 CI/CD,选择 ACF。
代理机构定价(不限网站数量)ACF PRO——$249/年,每份许可证均包含完整功能集。$149–$229/年,或 $699 一次性付费,按扩展包拆分。如需简单、可预测的许可方式,选择 ACF。
代理机构的最佳默认选择更强大的默认方案,可在不同客户端构建中统一标准化一套内容建模工作流。当项目明确需要自定义表存储或采用其关系表架构时。ACF。

正如你所见,对于大多数代理机构而言,直接的选择是从 ACF 开始,除非项目有明确偏向 Meta Box 的特定架构需求。

以下章节将对此进行详细解析。

使用 ACF PRO 为你的网站增添高级功能

通过 Flexible Content、Repeater、Clone、Gallery Fields 等 ACF Blocks 和 Options Pages 功能加快工作流,更高效地开发网站。

探索功能 查看定价

PRO 功能

ACF Blocks

Options Pages

PRO Fields

Repeater

Flexible Content

Gallery

Clone

ACF 和 Meta Box 如何创建字段、文章类型和分类法?

ACF 和 Meta Box 都可以通过可视化方式创建自定义字段、文章类型和分类法,但 ACF 将这些任务组织为更统一的、以字段组为中心的工作流。

在 ACF 中: 

  • 开发者创建一个字段组,添加所需的字段类型,然后使用位置规则控制该字段组出现的位置。 
  • 位置规则可以针对文章类型、页面模板、分类术语、用户、选项页面及其他 WordPress 对象。 
  • 在前端,诸如 get_field() 之类的函数提供了一致的 API,用于获取和格式化这些值。
  • 自 ACF 6.1 起,同一管理界面还可以注册自定义文章类型和自定义分类法。开发者可以创建 CPT,为其关联分类法,然后创建或附加字段组,无需引入其他插件或切换到手动注册代码。 
  • ACF PRO 将相同的工作流扩展到 Options Pages,其界面在 ACF 6.2 中加入,用于管理网站范围的设置,例如联系信息或可复用的页眉内容。

Meta Box 现在也提供功能类似的可视化工作流,但其产品结构有所不同:

  • 独立的 Meta Box 框架仍以代码为导向,没有配置界面。
  • Meta Box Lite 将该框架与 MB Builder 及其免费扩展打包,提供用于自定义字段、CPT、分类法和关系的界面。 
  • Meta Box AIO 通过更广泛的高级扩展集扩展了这一功能栈。

ACF 的优势在于整个构建过程中的一致性。字段、字段组、位置规则、CPT、分类法、Options Pages 和模板 API 都遵循相同的 ACF 约定,因此开发者可以在不同的客户项目中应用熟悉的工作流,而不必围绕彼此独立的扩展或配置模式调整流程。

ACF 与 Meta Box 如何存储字段数据?

ACF 通过 WordPress 现有的元数据架构存储常规字段值,而 Meta Box 可以选择将特定字段数据移至专用数据库表中。当项目具有异常的数据量或查询需求时,这一差异会很重要,但自定义表并非天然适合每个 WordPress 网站。

ACF 如何存储字段数据

ACF 遵循字段所属 WordPress 对象的存储模型。文章字段使用文章元数据,用户字段使用用户元数据,分类法字段使用术语元数据,Options Page 的值通常使用 WordPress 选项表。

除了保存的字段值之外,ACF 还会存储一个字段键引用,用于将该值与其 ACF 字段定义关联起来。该引用使 ACF 能够识别字段类型,并在 get_field() 等函数加载值时应用正确的格式设置。

Local JSON 会将 Field Groups、自定义文章类型、自定义分类法和 Options Pages 的 ACF 配置保存为 JSON 文件,以便对这些定义进行版本控制并在不同环境之间同步。

Meta Box 自定义表的工作原理

Meta Box 通常也使用 WordPress 元数据,但 MB Custom Table 提供了另一种存储模型。可以将一个字段组分配给专用表,其中每个对象占一行,字段 ID 对应各列。启用自动创建表后,Meta Box 默认使用 TEXT 创建相应的列。通过代码定义表的开发者则可以为各列选择 MySQL 数据类型和索引。

这种控制能力也会带来架构方面的影响。Meta Box Group 会作为序列化数组存储在其列中,因此无法使用 SQL单独查询其子字段。移至自定义表的字段在查询时也不再表现为传统的 WordPress 元数据:Meta Box 文档指出,WP_Query 的 meta_* 参数不会直接查询这些自定义表的值,因此开发者可能需要先查询该表以获取对象 ID。 

ACF 支持双向关系吗?

支持,ACF 原生支持 Relationship、Post Object、User 和 Taxonomy 字段的双向更新。

对于受支持的字段,开发者可以在 Advanced 设置中启用 Bidirectional,并选择一个或多个目标字段。 

Enabling the bidirectional setting for a field in ACF.

当源字段发生变化时,ACF 会将当前对象的 ID 添加到或从这些目标字段中移除。例如,连接产品的 Relationship 字段可以自动更新每个所选产品上的相应关系数据。

不过,双向更新仅在源字段附加到文章、用户或分类术语时才会运行。当该字段用于 Options Page、区块、小工具或其他无法解析为上述受支持对象类型的位置时,双向更新不适用。目标字段还必须是兼容的顶层字段,不支持将嵌套字段作为目标。

ACF 还会阻止更新链越过直接目标。如果两个不同字段需要在两个方向上保持同步,通常必须在两个字段上都配置双向关系。ACF 执行自动更新时,不一定会强制执行目标字段的单值限制或最大值限制。

Meta Box 通过 MB Relationships 采用另一种方式。它不会同步每个对象字段中存储的值,而是在专用的 mb_relationships 表中以起始对象 ID 和目标对象 ID 的形式记录关联。这些关联在查询时是双向的,开发者还可以通过 MB Builder 以可视化方式配置关系。

这两种模型并不存在简单的替代关系。Meta Box 提供专用的关系数据架构,而 ACF 则允许开发者将关系数据保留在 ACF 项目其他位置所使用的同一套基于字段的内容模型中。

哪种方式更适合重复内容:ACF 还是 Meta Box?

ACF 和 Meta Box 都支持重复和嵌套内容,但建模方式不同——ACF PRO 提供专用的 Repeater 和 Flexible Content 字段类型,而 Meta Box 则通过克隆系统使单个字段和字段组可重复使用。

ACF Repeater 与 Flexible Content

ACF Repeater 可创建一组可重复的子字段。开发者可以将一行用于团队成员、用户评价、定价层级或活动场次,然后让编辑人员添加任意数量的行,直到字段配置所允许的上限。Repeater 中还可以包含其他 Repeater,以构建包含多个课程单元的课程等层次化内容。

Flexible Content 的设计目的不同。开发者不是重复一组固定的子字段,而是定义多种布局,每种布局都有自己的字段。随后,编辑人员可以选择、排序并重复这些布局,以组装结构化页面内容。

对于大型 Repeater,ACF 可以在 WordPress 管理后台中对行进行分页,从而无需同时呈现所有行。不过分页确实存在限制。目前,嵌套在其他 Repeater、Flexible Content 字段或 ACF Blocks 内的 Repeater 无法使用分页,Flexible Content 本身目前也不支持分页。

Meta Box 可克隆字段和分组

Meta Box 将可重复性视为一种字段能力,而非专用的 Repeater 字段类型。各个字段都可以标记为可克隆,允许编辑人员添加同一输入项的多个实例。

对于结构化的可重复内容,MB Group 将相关子字段组合成一个组。该组本身可以设为可克隆,从而生成用途与 Repeater 类似的重复结构。组中还可以包含其他组;Meta Box 文档说明嵌套深度没有固定限制。

关键之处与其说是两款产品能否重复内容,不如说开发者如何表达内容模型。ACF 提供专门设计的 Repeater 和 Flexible Content 字段,分别使用不同的编辑模型来重复固定模式,或在预定义布局之间进行选择。Meta Box 则主要通过可克隆字段和分组来构建大部分相同的灵活性。

对于在各项目中跨项目使用 ACF 的代理机构,这些专用字段类型尤其能清晰表达内容模型的意图:结构会重复时使用 Repeater;编辑人员需要在不同结构化布局之间进行选择时使用 Flexible Content。

在区块、页面构建器和 API 方面的 ACF 与 Meta Box 对比

当同一内容模型需要同时服务于 PHP 模板、自定义区块、页面构建器和由 API 驱动的前端时,ACF 是更合适的默认选择。Meta Box 也支持这些开发模式,因此决定因素在于:当前端发生变化时,团队能否持续一致地复用同一套内容建模规范。

自定义区块

ACF PRO 包含 ACF Blocks,使开发者能够使用 ACF 字段构建 WordPress 区块,并通过 PHP 呈现这些区块,而无需在 React 中构建整个编辑界面。区块可以通过 block.json 注册;ACF Blocks V3 则增加了对 WordPress Block API Version 3 的兼容性,并在从侧边栏或展开的编辑面板编辑字段时,保持呈现后的预览可见。

Meta Box 通过 MB Blocks 提供类似的区块开发能力。它也支持 block.json、PHP 呈现、脚本和样式,以及 Block API Version 3。

页面构建器

选择页面构建器时,仅有“支持 ACF”或“支持 Meta Box”并不足够。开发者应核实项目所需的确切字段类型和呈现模式。兼容性同样较为复杂。 

例如,Bricks 同时支持 ACF 和 Meta Box,包括它们的自定义字段、文章类型、分类法和关系。Bricks 还可以在 Query Loop 构建器中使用 ACF Relationship 和 Repeater 字段,从而将其子字段作为动态数据使用。

Elementor 通过动态标签支持标准 ACF 字段,但明确排除了 Repeater 字段等。Meta Box 通过 MB Elementor Integration 与 Elementor 相连,将 Meta Box 数据暴露在 Elementor 的动态标签中,并为分组数据提供额外的工作流。

REST 和 GraphQL

ACF 和 ACF PRO 均包含 WordPress REST API 支持。字段组可以选择启用 REST API,之后即可通过相关的 WordPress 端点读取和更新其数据。

Enabling the ‘Show in REST API’ option for a Field Group in ACF.

Meta Box 通过 MB REST API 提供类似功能,该功能使用 Meta Box 字段数据扩展 WordPress REST 端点,并为设置页面添加自己的端点。

在 GraphQL 方面,两者的差异更加明显。WPGraphQL for ACF 是一款成熟且免费的 WPGraphQL 扩展,可将 ACF 字段组和受支持的字段类型映射到 WPGraphQL 架构中,包括 Repeater 和 Flexible Content 等 PRO 字段。 

对于代理商而言,这种广泛兼容性很有用,因为 ACF 可以继续作为内容建模层,而展示层则可灵活更换。同一套底层字段组可以支持 PHP 模板、ACF Blocks、可视化构建器、REST 客户端或基于 WPGraphQL 的无头应用,无需团队针对每种前端架构采用不同的内容建模系统。

Meta Box 当前的文档列出了 REST API 支持,但没有记录等效的官方 WPGraphQL 扩展。其支持论坛仍持续引导开发者使用社区创建的集成。

ACF 和 Meta Box 如何与 Git 配合使用?

ACF 和 Meta Box 都可以将内容建模配置纳入 Git 管理,但 ACF 目前通过 Local JSON 覆盖了更广泛的配置,并提供专用的 WP-CLI 命令用于部署自动化。

Git 不会对编辑器输入到自定义字段中的值进行版本控制,因为这些值仍保存在 WordPress 数据库中。Git 可以跟踪的是内容模型本身,例如字段定义和其他以文件形式存储的配置。

ACF Local JSON

ACF Local JSON 可以将字段组、自定义文章类型、自定义分类法和选项页面保存为 JSON 文件,通常位于 acf-json 目录中。这些文件可以与主题或插件代码一并提交到 Git。当较新的 JSON 定义到达另一个环境时,ACF 可以检测到它,并将相应配置与该站点的数据库同步。

开发者还可以自定义 ACF 的 JSON 保存和加载路径。这样便可将站点特定的定义与存储在主题、插件或其他目录中的可复用配置分离开来。

ACF 6.8 将此工作流扩展到了命令行。其 WP-CLI 命令可以:

  • 检查 JSON 定义的同步状态。
  • 将待处理的 JSON 更改同步到数据库。
  • 从 JSON 导入定义。
  • 导出字段组、CPT、分类法和选项页面。

这样一来,Local JSON 就更容易纳入脚本化部署和 CI/CD 流水线,无需依赖有人在 wp-admin 中手动执行同步。

Meta Box Local JSON

Meta Box 也支持对字段定义进行版本控制。Local JSON 将字段组存储在 mb-json 目录中,Meta Box 可直接从中加载,并检测较新的定义以便同步。开发者可以审查更改,将 JSON 同步到数据库中以便进行可视化编辑,还可以使用架构辅助工具直接编辑 JSON 文件。

此外,Meta Box 支持代码优先的工作流。字段组可以在 PHP 中注册并提交到 Git,而其 CPT 和分类法工具可以生成 PHP 注册代码,开发者可将其移入主题或插件中。

实际差异在于 ACF 将多大比例的工作流纳入同一套版本控制和部署系统。ACF Local JSON 涵盖字段、CPT、分类法和选项页面,其 WP-CLI 层还可以在不同环境之间自动同步这些配置。对于维护众多 WordPress 站点的机构而言,这为 ACF 提供了一条尤其连贯的路径:从可视化配置到 Git,再到自动化部署。

ACF 和 Meta Box 的费用是多少?

ACF PRO 每年 $49 至 $249,而 Meta Box 提供每年 $49 至 $229 的方案,另有售价 $299 和 $699 的终身套餐。更大的区别在于两款产品如何打包其付费功能。

使用 ACF PRO 时,每个许可证都包含相同的完整 PRO 功能集。各档位仅在可激活许可证的网站数量上有所不同:

  • Personal – 每年 $49,可用于一个网站。
  • Freelancer – 每年 $149,可用于十个网站。
  • Agency – 每年 $249,可用于不限数量的网站。

开发和暂存环境不计入这些激活限制。ACF PRO 还是一个独立插件,因此你无需在安装它的同时继续保留免费版本。

Meta Box 按网站额度和所含扩展来划分其付费产品。其 Personal 方案为:Basic 每年 $49,适用于一个站点;Ultimate 每年 $99,适用于三个站点;以及三站点终身套餐一次性付费 $299。Agency 定价为:Basic 每年 $149,Ultimate 每年 $229,或终身版一次性付费 $699。

Basic 包含十二个 PRO 扩展,而 Ultimate 包含当前及未来的所有 PRO 扩展,以及 Meta Box AIO。Lifetime 增加终身更新和支持,其中终身套餐还包含 Meta Box Solutions。

不过,Meta Box 的“无限站点”Agency 许可证不适用于企业、托管服务商、SaaS 公司、站点维护服务商或类似业务,这些客户会被引导至定制定价。实际价值取决于一个组织维护多少个站点,以及每个项目需要哪些功能。 

对于标准化采用单一技术栈的机构而言,ACF 的许可模式更容易估算——每年 $249 即可覆盖不限数量的网站激活次数,而且每个项目都会获得相同的 ACF PRO 功能集,无需在扩展套装之间作出选择。

使用 ACF PRO 的高级功能增强您的网站

利用 ACF Blocks 和选项页面加快工作流并解锁功能,以更好地开发网站,配备灵活内容、重复器、 克隆、图库字段等。

探索功能 查看定价

PRO 功能

ACF Blocks

选项页面

PRO 字段

重复器

灵活内容

图库

克隆

为什么 ACF 是机构的首选

对于大多数机构而言,除非某个项目有明确的架构原因需要改选 Meta Box,否则 ACF 是更理想的首选。优势并不在于 Meta Box 缺少强大功能,而在于 ACF 为团队提供了一致的内容建模层,即使项目类型、前端和开发工作流发生变化,这一层也能保持不变。

这种连续性涵盖:

  • 字段组、自定义文章类型和分类法,用于组织内容。
  • Repeater、Flexible Content、Options Pages 和 Gallery,满足更复杂的编辑需求。
  • PHP 模板和 ACF Blocks,用于传统式及基于区块的 WordPress 网站开发。
  • Bricks 和 Elementor 工作流,可通过受支持的 ACF 字段提供动态内容。
  • 基于 REST 和 WPGraphQL 的架构,适用于将 WordPress 软件作为另一前端的内容后端。
  • 本地 JSON、Git 和 WP-CLI 同步,用于在开发、预发布和生产环境之间迁移配置。
  • 原生双向关系,适用于受支持的 Relationship、Post Object、User 和 Taxonomy 字段。

对代理商而言,关键是标准化。宣传册网站、编辑平台、WooCommerce® 构建、自定义区块系统或无头项目,其内容呈现方式可能大不相同,但团队不一定需要在每次项目中都替换底层内容建模惯例。

这也有利于工作交接。接手 ACF 项目的开发者可以使用与其他代理商项目中相同的 Field Group 结构、字段 API、JSON 工作流和 PRO 功能集,从而减少团队需要维护的项目特定惯例。

ACF 覆盖更广泛的客户 WordPress 项目,而 Meta Box 适用于范围较窄的一类项目:硬性要求使用自定义表存储或专用关系表的项目,以及现有的基于 Meta Box 的开发技术栈。ACF 是更适合作为标准化基础的选项,因为即使前端和项目需求发生变化,内容模型仍可保持一致。

使用 ACF PRO 开启你的下一个客户项目,从第一个字段到最终前端,都基于同一套内容建模工作流进行构建。

来源:Advanced Custom Fields 官方博客 · https://www.advancedcustomfields.com/blog/acf-vs-meta-box/

部分链接为推广/关联链接。