Polylang与WP-All Import WooCommerce插件兼容及批量导入问题问询
解决WP All Import与Polylang WooCommerce批量关联多语言产品的问题
直接上可落地的实现方案——通过自定义函数,在导入第二种语言产品时自动通过SKU匹配原语言产品ID,并填充到_import_translations_id字段:
步骤1:添加自定义函数到主题或插件
将以下代码添加到你的主题functions.php文件,或者创建一个简单的自定义插件:
function get_product_id_by_sku_for_polylang($sku) { // 校验SKU非空 if (empty($sku)) return ''; // 通过SKU查询对应产品ID(默认查询网站默认语言的产品) $product_id = wc_get_product_id_by_sku($sku); return $product_id ? $product_id : ''; }
步骤2:在WP All Import中配置字段映射
导入第二种语言的产品文件时,找到_import_translations_id自定义字段的映射设置:
- 选择「PHP函数」作为映射类型
- 输入函数调用:
get_product_id_by_sku_for_polylang({SKU列名}),替换{SKU列名}为你导入文件中SKU对应的列标题(比如CSV里SKU列叫product_sku,就写get_product_id_by_sku_for_polylang({product_sku}))
关键注意事项
- 确保所有产品的SKU全局唯一,这是匹配的核心依据
- 原语言产品必须在导入第二种语言产品前完成导入并同步到Polylang
- 确认Polylang已启用WooCommerce多语言支持,且产品语言设置正确
- 若需指定查询特定语言的产品,可在函数中添加Polylang的语言过滤逻辑,比如用
pll_get_post配合语言参数调整
可选优化(适配更新场景)
如果需要处理后续更新多语言产品的场景,可在函数中添加逻辑避免重复覆盖已有翻译关联:
function get_product_id_by_sku_for_polylang($sku) { if (empty($sku)) return ''; $product_id = wc_get_product_id_by_sku($sku); // 检查当前导入产品是否已有翻译关联 global $wpdb; $current_product_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM {$wpdb->prefix}pmxi_posts WHERE import_id = %d AND post_title = %s", $_GET['import_id'], $_POST['post_title'])); if ($current_product_id) { // 替换为你的原语言代码,比如'zh' $existing_translation_id = pll_get_post($current_product_id, 'zh'); if ($existing_translation_id) return $existing_translation_id; } return $product_id ? $product_id : ''; }
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

