【问题标题】:Generate the product variations SKUs from Woocommerce parent variable SKU从 Woocommerce 父变量 SKU 生成产品变体 SKU
【发布时间】:2018-12-21 15:20:02
【问题描述】:

在 Woocommerce 中,我想从父变量产品 SKU 生成产品变体 SKU,例如:

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

所以我需要订单中的 SKU(并在选择变体时显示在产品页面中),例如:1200-01

我不知道如何在 woocommerce 中实现这一点。我之前使用过其他商店系统,这是一个非常基本的设置,可以让变体运行。

非常感谢您的帮助。

【问题讨论】:

    标签: php wordpress woocommerce variations sku


    【解决方案1】:

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

    第一种方式:

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

    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。

    // 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 数量已经生成(保持顺序):

    【讨论】:

    • 哇,非常感谢。这两种解决方案都非常有帮助。完美!
    • 嗨 LoicTheAztec,我能再问你一个问题吗?现在我们有父 SKU 例如:1111 Variation SKU 例如:89(从 Variaton 更改为 variotan)。我们要在前端:1111-89
    • 抱歉格式错误,这里没有换行。

      所以基本上是一个组合(并在beetween中添加一个“-”):parentSKU-varSKU

      感谢您的帮助
    猜你喜欢
    • 2020-10-17
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多