WooCommerce与WPML:产品创建的语言指定问题
指定WPML环境下WooCommerce产品创建的目标语言
这个问题我之前也碰到过!当WPML和WooCommerce一起使用时,直接用WC_Product类创建产品确实会默认采用站点的默认语言(通常是英文)。要指定创建产品时的目标语言,我们可以借助WPML提供的函数来实现,下面给你两种实用的方案:
方案一:切换语言上下文后创建产品
通过临时切换当前的WPML语言上下文,让WooCommerce在创建产品时自动关联到目标语言。完成创建后再切回原语言,避免影响后续操作:
// 先保存当前活跃的语言环境 $current_lang = apply_filters( 'wpml_current_language', null ); // 切换到目标语言,这里以西班牙语(代码为'es')为例 do_action( 'wpml_switch_language', 'es' ); // 创建并配置产品 $product = new WC_Product; $product->set_name('Mi producto de prueba'); $product->set_slug('producto-prueba'); $product->set_description('Este es mi producto de prueba'); $product->set_sku('some_sku_es'); $product_id = $product->save(); // 切回原来的语言环境 do_action( 'wpml_switch_language', $current_lang );
方案二:先创建默认语言产品,再生成目标语言版本
如果需要保留默认语言的产品副本,或者要批量生成多语言版本,可以先创建默认语言产品,再通过WPML的复制函数生成目标语言版本,之后按需修改内容:
// 先创建默认语言(英文)的产品 $product = new WC_Product; $product->set_name('My test product'); $product->set_slug('test-product'); $product->set_description('This is my test product'); $product->set_sku('some_sku'); $default_product_id = $product->save(); // 使用WPML函数生成目标语言版本(这里以西班牙语为例) $target_lang_product_id = apply_filters( 'wpml_element_duplicate', $default_product_id, [ 'target_language' => 'es', 'source_language' => 'en', 'element_type' => 'product' // 指定元素类型为WooCommerce产品 ] ); // 按需修改目标语言产品的信息 if ( $target_lang_product_id ) { $target_product = wc_get_product( $target_lang_product_id ); $target_product->set_name('Mi producto de prueba'); $target_product->set_slug('producto-prueba'); $target_product->set_description('Este es mi producto de prueba'); $target_product->set_sku('some_sku_es'); $target_product->save(); }
注意事项
- 确保你已经激活了WPML的WooCommerce Multilingual组件,上述函数依赖这个组件才能正常工作;
- 语言代码要和WPML后台设置的保持一致(比如
fr代表法语,de代表德语),可以在WPML的语言设置页面查看对应语言的代码; - 如果是批量创建产品,方案一的效率会更高,无需额外复制产品的步骤。
内容的提问来源于stack exchange,提问作者José María Lamela Real
相关产品推荐
相关产品推荐

