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
相关产品推荐
相关产品推荐

