php - 从 Woocommerce 父变量 SKU 生成产品变体 SKU

标签 php wordpress woocommerce product-variations sku

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

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

因此,我需要在订单中添加 SKU(并在选择变体时显示在产品页面上)。例如,1200-01

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

最佳答案

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

第一种方法:

当产品使用 WC_Product 方法 get_sku() 时,以下代码将仅生成用于前端显示(“ View ”)的组合 sku(但不会生成并保存组合变体来自可变产品的 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) 在可变产品的“高级”选项卡设置上:选中复选框

enter image description here

b) 更新变量产品:

enter image description here

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

enter image description here

enter image description here

关于php - 从 Woocommerce 父变量 SKU 生成产品变体 SKU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53887148/

相关文章:

php - 如何使用 mysql 在 PHP 中循环获取查询

php - WooCommerce 如何检查 functions.php 中的页面是否为 is_shop()?

wordpress - WooCommerce API 的高级自定义字段

php - 有条件地将类添加到购物车商品并在 Woocommerce 中订购商品

php - 在 WooCommerce 中设置特定国家/地区允许的最小重量

php - Laravel/PHP - 将多个值推送到查询字符串(相同参数)

php - 使用 DTD 将元素定义为 CDATA?

wordpress - 如何从query_posts获取结果数?

PHP/Wordpress - 向父菜单添加箭头

wordpress - Woocommerce 商店经理角色,隐藏 woocommerce 菜单