Woocommerce API的重复SKU检查之前是否有钩子?

问题描述 投票:0回答:1

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

这是我的处理方式:

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之后很久了,因为我注意到我什么也不能返回,而且仍然返回product_invalid_sku错误。什么是正确的钩子,或者甚至存在这样的钩子?

woocommerce woocommerce-rest-api wpml
1个回答
0
投票

我自己的解决方案:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.