You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce API重复SKU检查前是否有可用钩子(WPML场景)

解决WooCommerce API创建翻译产品时的SKU重复验证问题

你遇到的问题核心就是钩子执行时机不对——woocommerce_api_create_product_data确实是在WooCommerce完成SKU唯一性验证之后才触发的,所以哪怕你后续移除了SKU,之前的验证已经抛出错误了。

要搞定这个问题,得用更早触发的REST钩子,也就是woocommerce_rest_pre_insert_product_object,它会在产品数据验证和插入数据库之前运行,刚好能让你提前处理SKU和翻译关联的逻辑,完美避开SKU重复检查。

下面是调整后的可用代码:

add_filter('woocommerce_rest_pre_insert_product_object', '__rest_pre_insert_translation_product', 10, 3);
function __rest_pre_insert_translation_product($product, $request, $creating) {
    // 只在创建新产品时处理逻辑
    if (!$creating) {
        return $product;
    }

    $sku = $request->get_param('sku');
    if (!empty($sku)) {
        // 通过SKU找到原产品ID
        $original_product_id = wc_get_product_id_by_sku($sku);
        
        if ($original_product_id) {
            // 转换为WPML原始语言的产品ID(确保拿到的是源语言产品)
            $original_product_id = apply_filters('wpml_object_id', $original_product_id, 'product', true);
            
            // 直接设置当前产品为原产品的翻译(符合WooCommerce+WPML内部逻辑)
            $product->set_translation_of($original_product_id);
            
            // 清空SKU,避开后续的重复验证
            $product->set_sku('');
            
            // 可选:让翻译产品的SKU字段永久禁用编辑(确保始终共享原产品SKU)
            add_filter('woocommerce_product_sku_enabled', '__return_false');
        }
    }

    return $product;
}

代码细节说明:

  1. 钩子时机:woocommerce_rest_pre_insert_product_object在产品数据验证流程前触发,所以我们能提前修改产品对象属性,从根源上避免SKU重复报错。
  2. 翻译关联:用set_translation_of()方法直接设置翻译关系,比手动修改translation_of字段更适配WooCommerce和WPML的联动逻辑。
  3. SKU处理:通过set_sku('')清空SKU值,让后续的唯一性验证不会检测到重复的SKU。
  4. SKU禁用(可选):通过woocommerce_product_sku_enabled钩子返回false,可以让翻译产品的SKU字段在后台和API中都无法编辑,彻底保证SKU和原产品共享。

额外注意点:

  • 确保WPML和Multilingual WooCommerce插件已经激活并正确配置了多语言产品分组。
  • 创建翻译产品时,要使用对应语言的REST端点(比如/wp-json/wp/v2/product?lang=fr),WPML会自动识别语言并关联到原产品的翻译组。
  • 如果用第三方工具发送API请求,记得带上正确的语言参数,否则WPML可能无法正确关联翻译关系。

内容的提问来源于stack exchange,提问作者Simon Josef Kok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:42:40