Woocommerce 产品修复变体设置默认数量

时间:2021-03-03 18:33:04

标签: php wordpress woocommerce

我想为所有产品相同的变量设置默认数量。第一个变体 1 个,第二个变体 2 个,第三个变体 3 个。 实际上 for 循环存在一些问题。 我会感谢可以提供帮助的人。 :)

    add_filter( 'woocommerce_available_variation', 'custom_variation_min_max_qty', 10, 3 );
function custom_variation_min_max_qty( $data, $product, $variation ) {
    // Your variable product ID
    $variable_id = $product->get_id();
    $qtym =0;
    if( $product->get_id() == $variable_id ) {
        // Set 1st variation ID
        for ($i=1; $i++; ) {
         if( $variation->get_id() == $i ){
            $qty = $qtym +1; // Set the quantity
            $qtym=$qty;
        }
            if ($i > 1000) {
        break;
    }
        }
        }
    if( isset($qty) ) {
        $data['min_qty'] = $qty;
        $data['max_qty'] = $qty;
    }
    return $data;
}
add_action( 'woocommerce_after_single_variation',  'change_variation_input_quantity_script' );
function change_variation_input_quantity_script() {
    global $product;
    // Your variable product ID
    $variable_id = $product->get_id();
    if( $product->get_id() != $variable_id ) return;
    // Output Javascript
    ?>
    <!-- JS Thankyou Script -->
    <script type="text/javascript">
    jQuery(function($) {
        var a = 'div.quantity > input.qty';
        // On load
        setTimeout(function(){
            $(a).val($(a).prop('min'));
        }, 300);
        // On change / select a variation
        $('.variations_form select').on( 'blur', function(){
            if( $('input[name="variation_id"]').val() > 0 )
                $(a).val($(a).prop('min'));
        })
    });
    </script>
    <?php
}

1 个答案:

答案 0 :(得分:1)

为每个产品变体执行 woocommerce_available_variation 钩子。

它位于 get_available_variation() 方法中,而该方法又在 get_available_variations() 类的 WC_Product_Variable 方法中执行。

如果你想像这样设置产品的数量(最小和最大):

  • 变体 1
    • min_qty => 1
    • max_qty => 1
  • 变体 2
    • min_qty => 2
    • max_qty => 2
  • 变体 3
    • min_qty => 3
    • max_qty => 3

等等...

您可以使用以下功能:

// set custom quantities to product variations
add_filter( 'woocommerce_available_variation', 'custom_variation_min_max_qty', 10, 3 );
function custom_variation_min_max_qty( $data, $product, $variation ) {
    // initializes the number (position) of the product variation
    $i = 1;
    // for each product variation
    foreach ( $product->get_children() as $variation_id ) {
        // if the id of the product variation is equal to the id of the current variation
        if ( $variation_id == $variation->get_id() ) {
            // sets the min and max values with the current position
            $data['min_qty'] = $i;
            $data['max_qty'] = $i;
        }
        $i++;
    }
    return $data;
}

代码已经过测试并且可以工作。将它添加到您的活动主题的functions.php。