Python调用WooCommerce API创建WPML多语言分类失败及插件必要性咨询
问题:Python创建WooCommerce多语言分类出错及插件疑问
场景与问题
环境配置:
- Python 3.8 +
woocommerce包 - WordPress 搭配 WooCommerce 7.3、WPML Multilingual CMS 4.5.14
编写的Python代码如下:
from woocommerce import API # 创建API实例 wcapi = API( url="FQDN", consumer_key="yourconsumerkey", consumer_secret="yourconsumersecret", wp_api=True, version="wc/v3" ) # 主语言(英文)分类数据 category_data_en = { "name": "Category Name in English", "parent": 0, "meta_data": [ { "key": "_wpml_language", "value": "en" }, { "key": "_wpml_translation_status", "value": "0" }, { "key": "_wpml_element_type", "value": "tax_category" } ] } # 创建主语言分类 new_category_en = wcapi.post("products/categories", category_data_en).json() # 波兰语翻译分类数据 category_data_pl = { "name": "Category Name in Polish", "meta_data": [ { "key": "_wpml_language", "value": "pl" }, { "key": "_wpml_translation_of", "value": new_category_en.get("id") }, { "key": "_wpml_translation_status", "value": "1" }, { "key": "_wpml_element_type", "value": "tax_category" } ] } # 创建翻译分类 new_category_pl = wcapi.post("products/categories", category_data_pl).json()
运行代码后生成了两个英文分类,同时疑问:是否必须安装WooCommerce Multilingual才能正确创建多语言分类?
错误原因分析
- 直接手动写入WPML元数据的方式不被WPML内部逻辑认可。WPML对翻译关系的管理有专属机制,不是简单通过
meta_data写入_wpml_language等字段就能触发翻译关联的。 - 代码中第二个分类的
_wpml_language元数据未被WPML识别,导致它继承了网站默认语言(英文),最终变成两个独立的英文分类,而非翻译关系。
WooCommerce Multilingual的必要性
必须安装该插件。WPML Multilingual CMS只是基础多语言框架,要实现和WooCommerce的深度整合(包括商品/分类的翻译关联、多语言数据同步、API支持等),必须依赖WooCommerce Multilingual插件。
安装后,插件会扩展WooCommerce的API,提供专门的多语言参数(如language、translation_of),让WPML能正确识别并建立合法的翻译关系,而非生成独立分类。
修正后的代码示例
安装并激活WooCommerce Multilingual后,使用插件支持的API参数编写代码:
from woocommerce import API wcapi = API( url="你的站点完整域名", consumer_key="你的消费密钥", consumer_secret="你的消费秘钥", wp_api=True, version="wc/v3" ) # 创建主语言(英文)分类,无需手动添加WPML元数据 category_data_en = { "name": "Category Name in English", "parent": 0 } new_category_en = wcapi.post("products/categories", category_data_en).json() # 创建波兰语翻译,使用WooCommerce Multilingual支持的专属参数 category_data_pl = { "name": "Category Name in Polish", "language": "pl", "translation_of": new_category_en.get("id") } new_category_pl = wcapi.post("products/categories", category_data_pl).json()
说明:安装插件后,WooCommerce API会原生支持language和translation_of参数,WPML会自动处理内部的翻译关联和元数据,不会再生成独立的同语言分类。
内容的提问来源于stack exchange,提问作者gerpaick
相关产品推荐
相关产品推荐

