指南

如何在 WooCommerce 中批量上传产品

WooCommerce 可以通过 CSV 文件一次导入数百个产品。本指南介绍内置导入器、何时更适合使用插件或 REST API,以及如何一开始就让 CSV 中的数据保持干净。

在 WooCommerce 后台逐个添加产品,对小店来说没有问题,但用这种方式导入供应商目录可能要花上好几天。WooCommerce 自带产品 CSV 导入器,对于更大规模或周期性的任务,还有导入插件和 API 可用。

导入本身很少是难点。难点在于生成正确的 CSV:每个产品或变体一行、列名正确、属性一致,以及值得发布的描述。

方案 1:WooCommerce 内置 CSV 导入器

WooCommerce 自带产品 CSV 导入器和导出器。在 WordPress 后台,前往“Products → All Products”并选择“Import”。上传您的 CSV,将其列映射到 WooCommerce 字段,然后运行导入。勾选“Update existing products”后,可以按 ID 或 SKU 匹配并更新现有产品,而不是创建重复项。

  • 先导出一个现有产品,并以该文件为模板——它会显示您的店铺所需的确切列名。
  • 常见的列包括 Type、SKU、Name、Published、Short description、Description、Regular price、Categories、Tags、Images 以及 Attribute 1 name / Attribute 1 value(s)。
  • 图片通过 URL 导入,因此在导入运行时必须可以公开访问。
  • 可变产品需要一个类型为 “variable” 的父行,以及每个变体一行并引用该父行。
  • 在共享主机上,过大的文件可能会超时——请拆分为每批几百行。

方案 2:导入插件

第三方导入插件增加了核心导入器所缺少的功能:从供应商数据源进行定时或周期性导入、XML 支持、字段转换规则,以及对超大文件更好的处理。当供应商定期发送更新的价格和库存文件时,这类插件很有意义。

插件同样需要结构化的输入。如果您的供应商提供的是 PDF 而不是数据源,插件并不能免去把这些 PDF 转成行数据的工作。

方案 3:WooCommerce REST API

开发人员和集成工具可以通过 WooCommerce REST API 创建产品,其中包括可在一次请求中创建或更新多个产品的批量接口。这适合自动化流程,以及无需经过 CSV 环节直接创建产品的应用。

Doc2Shelf 采用这一方式:审核之后,它会将产品作为简单草稿产品发送到 WooCommerce,附带长描述和简短描述,让您在上线之前先在 WooCommerce 中检查。全局筛选属性和可变产品需在 WooCommerce 中另行配置。

批量上传前准备产品数据

无论采用哪种导入方式,数据质量都决定结果。导入之前:

  • 为每个产品设置唯一的 SKU——日后更新时就靠它找到正确的产品。
  • 先在 WooCommerce 中创建分类和全局属性,然后保持一致地引用。
  • 规范规格参数:单位相同、属性名称相同、每个单元格一个值。
  • 撰写真正的描述,而不是粘贴供应商的文字;平台和搜索引擎更青睐原创文案。
  • 首次运行时以草稿形式导入——将 Published 设为 -1(设为 0 会使产品变为私有)——然后在全部发布之前先审核一个样本。

当供应商只发送 PDF 时

许多供应商提供的数据表和目录是 PDF,而不是 CSV 数据源。这种情况下,瓶颈在于提取:必须有人阅读每份 PDF、填写各列并撰写描述。

您可以手动完成,也可以用工具提取数据后再审核。Doc2Shelf 读取供应商 PDF,提取规格参数供您审核,起草 WooCommerce 的长描述和简短描述,并通过 REST API 将产品创建为草稿——对于来源于 PDF 的目录,取代了电子表格这一步。

常见的 WooCommerce 导入错误

如果导入失败或结果不符合预期,请先检查以下几点:

  • SKU 重复或缺失,导致行被跳过或产品被重复创建。
  • 文件编码错误——请将 CSV 保存为 UTF-8,以便带重音符号的字符能正确导入。
  • 图片 URL 发生重定向、需要登录,或指向过大的文件。
  • 分类路径写法不一致(嵌套分类请使用“父分类 > 子分类”格式)。
  • 变体的属性值与父产品的属性值不一致。

WooCommerce 产品 CSV 列参考

核心导入器读取一组固定的列名。从您自己的商店导出一个产品,即可得到您所用的 WooCommerce 版本所需的准确表头;下表解释了对批量上传最重要的几列。只有 Name 是必填的——其他列均为可选,但如果导入的目录缺少 Type、SKU、价格和分类,之后会留下大量手工工作。

表头中带单位的列,例如 Weight 和三个尺寸列,显示的是您在商店设置中配置的单位,因此请从导出文件中复制这些表头,而不要手动输入。没有专属列的自定义数据,放入表头以 meta: 开头、后接字段键名的列中。

WooCommerce CSV 导入器的核心列(WooCommerce 3.1 及更高版本)
列内容示例说明
ID现有的 WooCommerce 产品 ID—新产品留空;更新类导入会首先按 ID 匹配。
Type产品类型simple还可以是 variable、variation、grouped 或 external。虚拟产品和可下载产品是附加在产品上的属性,而不是单独的类型。
SKU您自己的唯一产品编码ACME-KTL-17更新时仅次于 ID 的第二匹配键。在商店内必须唯一。
GTIN, UPC, EAN, or ISBN全球产品标识符4006381333931核心字段。自 WooCommerce 11.2 起,当 ID 和 SKU 均为空时,作为备用匹配键。
Name产品标题不锈钢水壶 1.7 L唯一必填的列。
Published导入后的状态-11 = 已发布,0 = 私有,-1 = 草稿,2 = 待审核。
Regular price / Sale price价格49.90纯数字,不带货币符号。
Stock库存数量25可按需与 In stock? 和 Backorders allowed? 配合使用。
Weight (unit), Length (unit), Width (unit), Height (unit)运输重量和尺寸1.2表头显示您商店设置的单位,例如 kg 或 cm。
Categories产品分类厨房 > 水壶, 礼品以逗号分隔;“>”表示子分类。
Images图片 URLhttps://cdn.example.com/ktl-front.jpg以逗号分隔;第一张图片成为特色图片。
Parent变体行所属的父产品ACME-KTL父产品的 SKU,或 id: 加上父产品的 ID。
Attribute 1 name / Attribute 1 value(s)一个属性及其取值Color / Red, Blue如有更多属性,请继续添加 Attribute 2、Attribute 3 等。
Attribute 1 visible / Attribute 1 global该属性的标志位1 / 1Visible 表示在产品页面上显示;global 表示使用全店通用属性。
Attribute 1 default可变产品的预选值Red在父产品行上设置。
meta:supplier_code自定义元字段D-4471任何以 meta: 开头的表头都会存为自定义元数据。

CSV 中的可变产品:父产品行和变体行

一个可变产品分布在多行中:一行父产品行,用于定义该产品及其提供的属性值;每个变体一行,承载某一种组合的价格、SKU 和库存。父产品行的 Type 为“variable”;每个变体行的 Type 为“variation”,并通过 Parent 列指回父产品,填写父产品的 SKU,或 id: 加上其 ID。

属性列把这些行关联起来。在父产品行上,Attribute 1 value(s) 以逗号分隔列出该产品提供的所有取值。在每个变体行上,出现相同的 Attribute 1 name,并且只带其中一个取值。拼写和大小写必须一致:如果父产品提供的是“Red”,而变体写成“red”,该变体最终可能没有可用的属性值。

当您使用在“产品 → 属性”下创建的全店通用属性时,请在父产品及其变体上将 Attribute 1 global 设为 1——分层导航和筛选小工具正是依赖它工作。自 WooCommerce 11.1 起,更新类导入还可以为已有的可变产品添加新变体,因此您无需重建父产品即可扩充系列。

  • 将每个父产品行放在其变体行之上,这样文件便于检查,并且变体引用父产品时父产品已经存在。
  • 为每个变体设置独立的 SKU 和价格;没有价格的变体无法购买。
  • 在父产品行上使用 Attribute 1 default,控制预先选中哪个选项。
示例:一款水壶提供两种颜色
行TypeSKUParentAttribute 1 nameAttribute 1 value(s)
父产品variableACME-KTL—ColorRed, Blue
变体 1variationACME-KTL-REDACME-KTLColorRed
变体 2variationACME-KTL-BLUACME-KTLColorBlue

通过 CSV 添加产品图片

Images 列接受一个或多个以逗号分隔的图片 URL。第一个 URL 成为特色图片,其余图片按列出顺序组成产品图库。导入期间,WordPress 会将每个文件下载到您的媒体库,因此每个 URL 在那一刻都必须可公开访问——无需登录,不是会过期的分享链接,也不会重定向到网页而不是文件本身。

图片通常是导入过程中最慢的部分:几百个产品、每个产品五张图片,就意味着超过一千次下载。托管图片之前先调整尺寸,使用具有描述性的文件名(kettle-red-front.jpg,而不是 IMG_0042.jpg),并把大型目录拆分成较小的文件。

核心导入器无法设置图片的替代文本 (alt text)。请事后在媒体库中、通过 REST API,或使用支持该功能的导入扩展来添加。一个变体只能有一张图片,因此每个变体行最多填一个 URL。

通过 WooCommerce REST API 批量创建产品

当导入需要反复进行、产品数据已存在于其他系统中,或者根本不希望有人处理 CSV 时,REST API 是更好的途径。其产品批处理端点 (POST /wp-json/wc/v3/products/batch) 可在一次请求中接受创建、更新和删除操作。

默认情况下,一次批处理请求中的创建、更新和删除合计最多 100 个对象。变体、分类、属性和属性项的批处理端点适用同样的限制。因此,一个包含 1,000 个产品的目录至少需要十次请求,添加变体后还会更多。

  1. 在 WooCommerce → 设置 → 高级 → REST API 下创建具有读/写权限的 REST API 密钥,或让应用通过 WooCommerce 的授权界面申请密钥。
  2. 先创建分类、全局属性和属性项,并记下它们的 ID。
  3. 将简单产品和父产品分批发送,每批最多 100 个,并将状态设为草稿。
  4. 通过各可变产品的变体批处理端点,创建该产品的变体。
  5. 检查响应中每一项的结果,只重试失败的项。
  6. 在后台抽查一部分草稿,然后再发布。

如何选择 WooCommerce 批量上传产品的插件或途径

如果核心导入器不够用,评判导入插件或扩展时,应看它如何处理您的数据,而不是看功能清单有多长;并且在选定之前,先用真实的供应商文件在商店的预发布 (staging) 副本上测试。下表比较了四种途径,随后是对任何插件都值得提出的问题。

  • 源格式:仅支持 CSV,还是同时支持 XML、电子表格文件以及通过 URL 获取的远程数据源。
  • 定时任务:能否按时间表重复运行导入,以获取新的价格和库存。
  • 映射与转换:导入时能否重命名列、拆分值、转换单位以及应用价格规则。
  • 可变产品:能否稳定地创建父产品、变体和全局属性。
  • 图片:如何下载、是否检测重复,以及是否设置替代文本。
  • 大文件:是否支持后台或分块处理,使长时间的导入不会超时。
  • 更新规则:按哪个键匹配(ID、SKU 或 GTIN),以及可以覆盖哪些字段。
批量上传 WooCommerce 产品的四种方式
途径最适合注意事项
核心 CSV 导入器店铺员工进行的一次性导入和批量更新服务器上传和时间限制;无法设置图片替代文本
导入插件或扩展周期性的供应商数据源、XML 或电子表格来源、定时更新多一个需要维护并保持兼容的插件
REST API 批处理请求自动化流程以及从其他系统同步需要开发时间;默认每次批处理请求 100 个对象
替您创建产品的应用数据起源于电子表格之外的产品,例如供应商文档核实该应用实际设置哪些产品类型和字段

导入前检查清单与常见错误修复

大多数失败的导入都可以追溯到跳过了某个准备步骤。每次大规模导入前,请先逐项完成检查清单,并用下表诊断仍然出现的问题。

  1. 备份数据库,或在商店的预发布副本上运行导入。
  2. 导出一个现有产品,并将其表头行复制到您的文件中。
  3. 创建文件中引用到的分类、全局属性和属性项。
  4. 检查每个 SKU 都是唯一的,并且每个变体的 Parent 值都匹配一个现有的父产品 SKU。
  5. 价格、库存、重量和尺寸列使用纯数字。
  6. 在隐私浏览窗口中打开一部分图片 URL,确认无需登录即可加载。
  7. 将 Published 设为 -1,使产品以草稿形式导入。
  8. 将文件保存为 UTF-8 编码的 CSV。
  9. 先导入一个十行的测试文件,检查结果,然后再分批导入其余部分。
WooCommerce 导入问题:原因与解决方法
问题可能的原因解决方法
产品被重复创建而不是更新未勾选“更新现有产品 (Update existing products)”,或 ID、SKU 与商店中的不一致勾选该选项;从新的导出文件中复制 ID 或 SKU
更新类导入中的行被跳过ID 或 SKU 都未匹配(自 11.2 起,仅当两者均为空时才会尝试 GTIN)在每一行中添加现有产品的 SKU 或 ID
变体被导入为单独的产品Type 未设为 variation,或 Parent 列为空或拼写错误使用 Type “variation” 和准确的父产品 SKU
图片缺失URL 需要登录、发生重定向,或托管方阻止下载将图片托管在可公开访问的直接 URL 上,然后重新运行导入
文件上传时被拒绝文件大于服务器允许的最大上传大小拆分文件,或请主机提供商提高限制
导入中途停止达到服务器的时间或内存限制导入更小的文件

正式导入前用虚拟产品进行测试

一个小型的虚拟文件,可以在映射错误波及几百个产品之前就把它们发现出来。请基于您的真实模板来制作,使表头完全一致,并给每个测试产品加上明显的标记——SKU 使用“TEST-”前缀并添加“test”标签——以便之后找到并删除这些产品。

要涵盖真实文件中包含的每一种情形,而不仅仅是最简单的那种。通常大约十行就足够了:

  • 一个简单产品,填写您计划使用的所有列。
  • 一个带有两个属性、至少三个变体的可变产品。
  • 一个带有多张图片图库的产品,以及一个没有图片的产品。
  • 一个位于尚不存在的嵌套分类中的产品。
  • 一个描述中含有带重音符号的字符、引号和逗号的产品。
  • 一行按 SKU 更新现有产品的数据。
  • 在后台和店面检查结果——价格、变体下拉菜单、图片顺序和分类页面——然后在正式导入之前删除测试产品。

常见问题解答

WooCommerce 有内置的批量上传产品功能吗?
有。WooCommerce 在“Products → All Products → Import”下自带产品 CSV 导入器,并配有相应的导出器。标准 CSV 导入无需任何插件。
一次最多可以向 WooCommerce 导入多少个产品?
导入器本身没有固定的产品数量上限,但您主机的服务器超时和内存限制决定了实际可行的规模。通常的做法是将大型目录拆分为每批几百行。
可以通过 CSV 导入更新现有产品吗?
可以。在导入器中启用“Update existing products”;各行会按 ID 或 SKU 匹配到现有产品,且只更新您包含的列。
可以直接从 PDF 向 WooCommerce 导入产品吗?
核心导入器不行,它需要 CSV。您需要先手动或借助提取工具从 PDF 中提取产品数据,然后通过 CSV 导入,或通过 REST API 创建产品。
WooCommerce 产品 CSV 需要哪些列?
核心导入器只要求 Name。若要得到可用的目录,至少应包含 Type、SKU、Published、Regular price、Categories、Images 和 Description。从您的商店导出一个产品,即可获得您所用版本所需的准确表头名称。
如何用 CSV 导入可变产品?
添加一个 Type 为“variable”的父产品行,列出所有属性值;然后为每个变体添加一行,Type 为“variation”,在 Parent 列填写父产品的 SKU,只带一个属性值,并设置各自的 SKU 和价格。
CSV 导入器可以导入产品图片和替代文本吗?
图片可以:在 Images 列中以逗号分隔列出公开的图片 URL,特色图片排在第一位。替代文本不可以——核心导入器无法设置,因此请事后添加,或使用 REST API 或扩展。
每次 WooCommerce REST API 请求最多能创建多少个产品?
批处理端点默认每次请求最多接受 100 个对象,创建、更新和删除合计计算。更大的目录需要通过一系列批处理请求发送。

更多指南

将供应商 PDF 转化为经过审核的产品数据

Doc2Shelf 从供应商文档中提取产品数据,并起草商品列表和合规文档,供您审核。

创建您的免费账户