首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Woocommerce父变量SKU生成产品变体SKU

从Woocommerce父变量SKU生成产品变体SKU
EN

Stack Overflow用户
提问于 2018-12-21 15:20:02
回答 1查看 3.4K关注 0票数 2

在WooCommerce中,我希望从父变量产品SKU生成产品变体SKU,如:

  • 可变产品sku: 1200
  • 第一产品变体SKU: 1200-01
  • 第二产品变体SKU: 1200-02
  • 第三产品变体SKU: 1200-03
  • ……等

因此,我需要一个SKU的顺序(并显示在产品页面时,选择变化)。例如,1200-01

我不知道如何在WooCommerce中实现这一点。我以前曾与其他商店系统合作过,这是一个非常基本的设置,以使变体运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-22 00:25:27

您可以使用多种方法为来自父变量产品的产品变体生成组合SKU。下面是其中的两个:

第一条路:

当产品使用WC_Product方法get_sku()时,下面的代码只为前端显示(“视图”)生成一个组合的sku (但不会像以另一种方式从变量产品中生成和保存组合变体sku)

代码语言:javascript
复制
add_filter( 'woocommerce_product_variation_get_sku', 'custom_variation_sku', 10, 3 );
function custom_variation_sku( $sku, $product ) {

    if( $main_sku = get_post_meta( $product->get_parent_id(), '_sku', true ) ){
        $sku = $main_sku . '-' . sprintf( '%02d', ( get_post($product->get_id())->menu_order ) );
    }

    return $sku;
}

代码在您的活动子主题(或活动主题)的function.php文件中。测试和工作。

第二条路:

以下内容将自动从可变产品SKU生成产品变体SKU。

第一个函数将向“高级”选项卡中的可变产品设置添加一个复选框。只有当您选中此复选框时,第二个函数将从变量产品SKU生成所有产品变体SKU。

代码语言:javascript
复制
// Custom checkbox for auto generation of the variations SKUs
add_action('woocommerce_product_options_advanced', 'additional_product_options_advanced_custom_checkbox');
function additional_product_options_advanced_custom_checkbox()
{
    global $post;

    echo '<div class="options_group show_if_variable hidden">';

    // Custom checkbox located on Advanced tab settings
    woocommerce_wp_checkbox( array(
        'id'          => 'generate_variations_skus',
        'label'       => __('Generate variations SKUs', 'woocommerce'),
        'description' => __('Auto Generation of the variations SKUs from variable sku', 'woocommerce'),
        'desc_tip'    => 'true'
    ));

    echo '</div>';
}

// Auto generate the variations SKUs
add_action( 'woocommerce_admin_process_product_object', 'wc_auto_generate_variations_skus', 10, 1 );
function wc_auto_generate_variations_skus( $product ) {

    if( $product->is_type('variable') && isset($_POST['generate_variations_skus']) ) {
        $parent_sku   = $product->get_sku();
        $children_ids = $product->get_children();
        $count        = 0;
        
        // Loop through the variations Ids
        foreach( $children_ids as $child_id ){
            $count++;

            // Get an instance of the WC_Product_Variation object
            $variation = wc_get_product($child_id);
            
            // Set the prefix length based on variations count
            $prefix = sizeof($children_ids) < 100 ? sprintf('%02d', $count) : sprintf('%03d', $count);

            // Generate and set the sku
            $variation->set_sku( $parent_sku . '-' . $prefix );

            // Save variation
            $variation->save();
        }
    }
}

代码在您的活动子主题(或活动主题)的function.php文件中。测试和工作。

a)在可变产品“高级”选项卡设置上:选中复选框

b)更新可变产品:

( c)现在已生成所有变体的SKU号(保持顺序)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53887148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档