多语言WooCommerce站点:如何用术语ID/Slug批量分配产品属性?
问题与解决方案
核心问题
多语言站点中,部分属性术语的文本值在两种语言中相同,但对应不同的术语ID。当前通过Python代码批量更新产品属性时,仅使用options参数传入文本值,导致系统自动匹配站点标准语言的术语,无法正确分配对应语言的翻译版本术语。
可行方案
WooCommerce API支持直接使用术语ID作为属性选项的分配参数,无需依赖文本值。对于Slug,需先通过API查询获取对应的术语ID,再传入参数。
1. 直接使用术语ID分配
将对应语言的术语ID放入options数组中,系统会精准匹配对应语言的术语,避免文本值相同导致的匹配错误。
2. 通过Slug获取术语ID(可选)
若需使用Slug,可先调用WooCommerce属性术语API(GET wp-json/wc/v3/products/attributes/{attribute_id}/terms),传入Slug参数查询得到对应术语ID,再将ID传入options数组。
修改后的代码示例
以属性ID=2(model)为例,根据产品语言版本传入对应的术语ID:
data['update'].append({ "id": str(int(product.wp_component_id_fr)), "attributes": [ # brand {'id':'1', 'visible':'true', 'options': [str.upper(product.brand.replace("&","&")).strip()]}, # model - 使用对应语言的术语ID {'id':'2', 'visible':'true', # 根据产品语言选择对应的术语ID:116101或137871 'options':['137871']}, # 替换为目标语言的术语ID # oem {'id':'4', 'visible':'true', 'options':oem_list}, # machine {'id':'5', 'visible':'true', 'options':[machine]} ] })
验证示例数据
修改后发送给WooCommerce的数据示例:
data = { 'update': [ { 'id': '502620', 'attributes': [ {'id': '1', 'visible': 'true', 'options': ['LIEBHERR']}, {'id': '2', 'visible': 'true', 'options': ['137871']}, # 替换为对应语言的术语ID {'id': '4', 'visible': 'true', 'options': []}, {'id': '5', 'visible': 'true', 'options': ['LIEBHERR R901 B']} ] } ] }
内容的提问来源于stack exchange,提问作者Olivier Janssen
相关产品推荐
相关产品推荐

