Woocommerce Variant SKU

时间:2016-03-17 00:06:08

标签: php woocommerce variants sku

目前在Woocommerce中,处理可变产品时,需要为每个变体定义完整的SKU。

我想要做的是定义一个父SKU,然后为每个变体定义SKU的后缀,最后的SKU是通过连接父加上变量后缀生成的。

所以我想说我有一个基本SKU PRODUCT_0001的父产品,SKU PRODUCT_0001我想在这里定义:

BASE

然后对于变体,比如说VARIANT_A,我想在这里定义后缀:

VARIANT

现在是产品变体的最终SKU(即在订单工作流程中传输的内容),我想表示为:

PRODUCT_0001/VARIANT_A

这样,在设置/定义许多变体时,这可以防止对同一基本产品代码进行双重处理。

有没有一种简单的方法可以实现这一目标?

1 个答案:

答案 0 :(得分:0)

我没有在电子邮件上试过这个,但这适用于仪表板区域和前端..

add_filter( 'woocommerce_get_sku', 'reigel_woocommerce_get_sku', 10, 2 );
function reigel_woocommerce_get_sku( $sku, $product ){
    // remove current filter to prevent unli loop on get_sku()
    remove_filter( current_filter(), __FUNCTION__ ); 
    if ( $product->get_type() === 'variation' ) {
        $parent = $product->parent->id?$product->parent->id:$product->get_parent();
        $sku = wc_get_product($parent)->get_sku() . '/' . $sku;
    }
    add_filter( 'woocommerce_get_sku', 'reigel_woocommerce_get_sku', 10, 2 );
    return $sku;
}

在变体上禁用sku唯一性...

add_filter( 'wc_product_has_unique_sku', 'reigel_wc_product_has_unique_sku', 10, 3 );
function reigel_wc_product_has_unique_sku( $sku_found, $product_id, $sku ) {
    $product = wc_get_product($product_id);
    if ( $product->get_type() === 'variation' ) {
        $sku_found = false;
    }
    return $sku_found;
}