You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce:如何基于产品文本规则批量创建商品属性?

编程提取规格文本键值对创建WooCommerce商品属性

你可以通过编程实现从产品规格文本中提取键值对,批量创建并关联WooCommerce商品属性,具体方案如下:

核心逻辑

从CSV的产品规格字段中,用正则匹配Key: Value格式的内容,将提取出的键作为WooCommerce属性名称,值作为属性选项,然后将属性关联到对应商品,确保前端筛选功能可用。

具体实现步骤

1. 解析CSV数据源

用PHP内置函数读取CSV文件,逐行获取产品的SKU(或ID)和规格文本内容。

2. 提取规格键值对

通过正则表达式匹配规格文本中的键值对,处理冒号前后的空白字符,过滤无效空值。

3. 创建WooCommerce属性

检查属性是否已存在,不存在则创建全局属性(支持前端筛选的前提),也可根据需求创建产品级自定义属性。

4. 关联属性到商品

将提取的属性值绑定到对应产品,保存更新后的产品数据。

代码示例

// 定义CSV文件路径
$csv_path = 'supplier_products.csv';
$file_handle = fopen($csv_path, 'r');

// 跳过CSV表头行
$header_row = fgetcsv($file_handle);

// 循环处理每一条产品数据
while (($product_row = fgetcsv($file_handle)) !== false) {
    // 假设第1列是产品SKU,第5列是产品规格文本(根据你的CSV结构调整索引)
    $sku = $product_row[0];
    $spec_content = $product_row[4];

    // 用正则提取键值对:匹配"键: 值"格式,支持多行值
    preg_match_all('/([^:\n]+):\s*(.*?)(?=\n[^:\s]|$)/s', $spec_content, $matches);
    $extracted_attrs = [];

    // 整理提取结果,过滤空值
    foreach ($matches[1] as $idx => $key) {
        $clean_key = trim($key);
        $clean_value = trim($matches[2][$idx]);
        if (!empty($clean_key) && !empty($clean_value)) {
            $extracted_attrs[$clean_key] = $clean_value;
        }
    }

    // 根据SKU获取对应WooCommerce产品对象
    $product_id = wc_get_product_id_by_sku($sku);
    if (!$product_id) continue;
    $product = wc_get_product($product_id);

    // 处理每个提取出的属性
    foreach ($extracted_attrs as $attr_name => $attr_value) {
        // 生成属性分类法名称(WooCommerce属性的标准格式)
        $taxonomy = wc_attribute_taxonomy_name($attr_name);

        // 检查属性是否已存在,不存在则创建全局属性
        if (!taxonomy_exists($taxonomy)) {
            $attr_args = [
                'name'         => $attr_name,
                'slug'         => sanitize_title($attr_name),
                'type'         => 'select', // 可选text/select等类型
                'order_by'     => 'menu_order',
                'has_archives' => true, // 开启归档,支持前端筛选
            ];
            // 创建属性
            wc_create_attribute($attr_args);
            // 注册属性分类法
            register_taxonomy($taxonomy, 'product', wc_get_attribute_taxonomy_args($taxonomy));
        }

        // 获取产品现有属性
        $product_attrs = $product->get_attributes();
        // 添加/更新当前属性
        $product_attrs[$taxonomy] = [
            'name'         => $taxonomy,
            'value'        => $attr_value,
            'is_visible'   => true, // 前端可见
            'is_variation' => false, // 非可变产品设为false,可变产品可改为true
            'is_taxonomy'  => true, // 关联全局属性,支持筛选
        ];

        // 设置产品属性
        $product->set_attributes($product_attrs);
    }

    // 保存产品更新
    $product->save();
}

// 关闭文件句柄
fclose($file_handle);

注意事项

  • 正则适配:如果你的规格文本使用中文冒号:或特殊格式,需要调整正则表达式(比如把:改为[::])。
  • 测试验证:先选取少量产品测试,避免批量操作导致数据错误。
  • 前端筛选启用:创建全局属性后,需在WooCommerce后台「产品 > 属性」中,为对应属性开启「存档」,并确保主题支持筛选功能。
  • 自定义属性选项:如果不需要全局属性(仅产品私有属性),可将is_taxonomy设为false,跳过创建分类法的步骤。

内容的提问来源于stack exchange,提问作者Mehdi Rafiai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:24:17