在Woocommerce API'之前是否有一个钩子;重复的SKU检查?

在Woocommerce API'之前是否有一个钩子;重复的SKU检查?,woocommerce,woocommerce-rest-api,wpml,Woocommerce,Woocommerce Rest Api,Wpml,我有一个网站与Woocommerce和WPML+多语言Woocommerce安装。我的问题是,我试图插入一个产品作为以前输入的产品的翻译,而不知道主产品的ID。如果我将ID输入为的translation\u,它会工作;这两种产品共享相同的SKU,并且翻译已禁用SKU字段,这就是我希望它的工作方式。但我不想将的翻译输入发送到Woocommerce的数据中。我只想使用SKU,然后让Wordpress首先检查带有该SKU的产品是否已经存在,如果已经存在,则将SKU替换为translation\u 我就

我有一个网站与Woocommerce和WPML+多语言Woocommerce安装。我的问题是,我试图插入一个产品作为以前输入的产品的翻译,而不知道主产品的ID。如果我将ID输入为的translation\u,它会工作;这两种产品共享相同的SKU,并且翻译已禁用SKU字段,这就是我希望它的工作方式。但我不想将的翻译输入发送到Woocommerce的数据中。我只想使用SKU,然后让Wordpress首先检查带有该SKU的产品是否已经存在,如果已经存在,则将
SKU
替换为
translation\u

我就是这样做的:

add_filter('woocommerce_api_create_product_data', '__create_product_data', -100, 2);

function __create_product_data($data, $api) {
    if(isset($data['sku']) && $product_id = wc_get_product_id_by_sku($data['sku'])) {
        $product_id = apply_filters('wpml_object_id', $product_id, 'product');
        $data['translation_of'] = $product_id;
        unset($data['sku']);
    }
    return $data;
}
但在我看来,执行似乎在SKU被检查很久之后才到达这一点,因为我注意到我不能返回任何内容,并且仍然返回
产品\u无效\u SKU
错误。什么是正确的钩子,或者这样的钩子是否存在?

我自己的解决方案:

add_filter('rest_pre_dispatch', '__rest_pre_dispatch', 10, 3);

function __rest_pre_dispatch($result, $server, $request) {
    $sku = $request->get_param('sku');

    if ($sku) {
        $id = wc_get_product_id_by_sku($sku);
        if ($id) {
            $product_id = apply_filters('wpml_object_id', $id, 'product');
            $request->set_param('translation_of', $product_id);
            $request->offsetUnset('sku');
        }
    }

    return $result;
}