搜索全站
建站 10 分钟阅读

WooCommerce 商品类型与变体怎么配?简单、可变、组合商品用法

商品类型选错,后面全是麻烦。本文讲清简单商品、可变商品、组合商品、外部商品的适用场景,给出用代码批量创建属性与变体的完整示例。

U
UFO_PF 2024-12-06 · 阅读 10 分钟
Wo 建站
阅读提示
本文约 3,688 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:一件衣服三个尺码,硬做成了三个独立商品

新手做 WooCommerce 最常见的结构性错误,是把”同一件衣服的 S/M/L”做成三个独立商品。短期能卖,长期全是问题:库存要分别维护、客户在列表页看到三张几乎一样的图、评价分散在三个商品上、想按颜色+尺码双维度选时彻底做不了。另一个极端是反过来——明明是互不相关的两个商品,硬做成变体,结果变体列表里出现”红色/无”这种莫名其妙的组合。

选型的判断标准其实只有一条:客户在下单时是否需要在同一件商品的不同规格之间做选择。需要选,就是可变商品;不需要,就是简单商品或组合商品。

原理分析:四种商品类型与适用场景

类型 说明 适用场景 典型误用
Simple 简单商品 单一价格单一库存 书籍、单规格商品 多规格硬拆成多个
Variable 可变商品 属性组合成多个变体 服装尺码颜色、规格套餐 属性不参与变体却勾选
Grouped 组合商品 聚合多个已有商品 套装推荐、配件搭配 想做”捆绑价”却用它
External 外部商品 跳转到站外购买 联盟营销、第三方链接 自有商品误用
Virtual/Downloadable 虚拟/可下载 课程、软件、券码 有实物却勾了虚拟

变体的组合数是各属性选项数的乘积。两个属性各 3 个选项就是 9 个变体,三个属性各 4 个选项是 64 个变体——超过 30 个变体会明显拖慢商品编辑页的保存速度,这时候要考虑拆分商品或用属性分层。

另一个容易忽略的概念是”用于变体的属性”与”仅用于展示的属性”。全局属性(如品牌、材质)如果不需要影响价格和库存,就不要勾选”用于变体”,否则会生成大量无效组合。

保姆级实操

步骤 1:先建全局属性

去”商品 → 属性”建全局属性(如 size、color),slug 会是 pa_size、pa_color。全局属性的好处是可跨商品复用,且有独立的属性归档页。只在单个商品内使用的规格,用商品页里的”自定义商品属性”即可。

步骤 2:手动创建一个可变商品

新建商品 → 商品数据面板选”可变商品” → 属性标签页勾选 size 并勾选”用于变体” → 设置选项值 → 到”变体”标签页点”生成变体” → 逐个填价格和库存。注意:未填价格的变体在前台无法加入购物车。

步骤 3:用代码批量创建属性

商品规格较多时,用 WooCommerce 提供的 wc_create_attribute() 函数批量建属性:

function mf_create_attr( $name, $slug, $terms ) {
    if ( taxonomy_exists( 'pa_' . $slug ) ) {
        return wc_attribute_taxonomy_id_by_name( $slug );
    }
    $id = wc_create_attribute( array(
        'name'        => $name,
        'slug'        => $slug,
        'type'        => 'select',
        'order_by'    => 'menu_order',
        'has_archives' => true,
    ) );
    foreach ( $terms as $i => $term ) {
        if ( ! term_exists( $term, 'pa_' . $slug ) ) {
            wp_insert_term( $term, 'pa_' . $slug, array( 'slug' => sanitize_title( $term ), 'order' => $i ) );
        }
    }
    return $id;
}

mf_create_attr( '尺码', 'size', array( 'S', 'M', 'L', 'XL' ) );

注意 wc_create_attribute() 只建属性,不建选项值,选项值要用 wp_insert_term() 单独加。

步骤 4:用代码批量生成变体

function mf_add_variations( $parent_id, $attr_slug, $options, $prices ) {
    foreach ( $options as $opt ) {
        $variation = new WC_Product_Variation();
        $variation->set_parent_id( $parent_id );
        $variation->set_attributes( array( $attr_slug => sanitize_title( $opt ) ) );
        $variation->set_regular_price( $prices[ $opt ] );
        $variation->set_manage_stock( true );
        $variation->set_stock_quantity( 10 );
        $variation->set_status( 'publish' );
        $variation->save();
    }
}

mf_add_variations( 123, 'pa_size', array( 'S', 'M', 'L' ), array(
    'S' => '99',
    'M' => '109',
    'L' => '119',
) );

WC_Product_Variation 是 WooCommerce 3.0 起的 CRUD 对象,set_attributes() 的键必须是属性的 taxonomy 名(pa_size)或属性名,值必须是选项的 slug(小写、无空格)。

步骤 5:变体的默认选择不要留空

“变体”标签页里可以为每个属性设”默认选项”。留空时前台下拉框第一项是”选择一个选项”,这会增加一步操作;设为最热销的规格,能直接减少这一步摩擦。

步骤 6:组合商品的正确用法

组合商品(Grouped)不是”捆绑价”工具,它只是把若干已有商品聚在一页展示、各自加购。如果需要”套装便宜 20 元”这种捆绑定价,应该用 Product Bundles 之类的扩展,或者干脆建一个新的简单商品代表套装并单独管库存。

步骤 7:虚拟/可下载商品的勾选项

卖课程、软件、券码时勾选”虚拟商品”(不填地址)+ “可下载商品”(上传文件或填下载链接)。可下载商品还能设下载次数限制和链接有效期,卖数字产品时这两项要设,否则链接会被无限传播。

常见踩坑

  1. 属性没勾”用于变体”:属性只作为展示文本,永远不会生成变体组合。
  2. 变体没填价格:前台显示”此商品目前不可用”,客户完全无法下单。
  3. 选项值用中文或大写:set_attributes() 必须用 slug(sanitize_title 后的值),传中文会导致匹配失败。
  4. 组合商品当捆绑价用:组合商品各子项按原价加总,不会自动打折。
  5. 变体数量过多:三属性 4×4×4 = 64 个变体,商品编辑页保存要十几秒,且客户选择成本极高。
  6. 案例:某家居店的”变体爆炸”:一款沙发设置了材质(4 种)× 颜色(6 种)× 尺寸(3 种)= 72 个变体,其中近一半组合实际不生产,但前台下拉框里依然可选,客户选到不存在的组合后下单失败,客服每天处理二十多起。改为只保留材质 × 颜色两个变体属性、尺寸拆成独立商品后,客服工单归零,编辑页保存时间从 14 秒降到 2 秒。
  7. 把自定义属性用于变体:自定义商品属性(商品页里手填的)不能用于生成变体,只有全局属性可以。

总结

商品类型选型的判断流程很简单:客户要不要在同一商品内选规格?要 → 可变商品;不要但想推荐搭配 → 组合商品;不需要任何选择 → 简单商品;站外成交 → 外部商品。行动清单:先把规格抽象成全局属性并只为真正影响价格库存的属性勾选”用于变体”,再用 wc_create_attribute() 与 WC_Product_Variation 批量建数据,然后给每个变体填齐价格、库存并设默认选项,最后确认变体总数控制在 30 个以内。结构定对了,后续的库存、评价和报表都会顺畅很多。完整商店搭建流程见 WooCommerce 从零搭建电商站,履约配置见 WooCommerce 运费与税费设置。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。