购物车中特定产品的自定义数量

时间:2019-09-12 06:23:08

标签: woocommerce

我已经为特定产品创建了功能。客户可以选择对象的颜色。如果客户选择“红色”,则在单个产品页面上输入的数量将更改为10、20、30、40、50 ...

对于同一产品,如果客户选择“绿色”,则选择更改为5,10,15,20,25 ...

在测试中,我在购物车中添加了红色选项,在绿色中添加了

现在我进入购物车页面,我在购物车中有2件商品...好!

但是我的数量我不知道更改基于颜色的自定义选择的数量输入字段。 我想将红色分别显示为10、20、30、40、50 ...,绿色为5、10、15、20、25 ...

我想使用我的自定义$ cart_item_data ['color']作为更改数量,因为产品ID与$ cart_item_data更改相同。

我已经尝试过了

function custom_quantity_input_default( $args, $product ) {
    global $woocommerce;
    $items = $woocommerce->cart->get_cart();

   foreach($items as $item => $values) {

        $color = $values['color'];
          if ($color == 'red'){
            $qte = '5';
          }

    }

    $args['step'] = $qte; 

    return $args;
}
add_filter( 'woocommerce_quantity_input_args', 'custom_quantity_input_default', 10, 2 );

但是不起作用,因为args返回两个乘积中的最后一个数字

1 个答案:

答案 0 :(得分:0)

在活动主题的functions.php中添加以下代码段-

// for single page quantity changes
function change_quantity_product_for_variation(){
    ?>
    <script type="text/javascript">
        ( function( $ ) {
            $( document.body ).on( 'show_variation', function(event, variation) {
                var $qty = $('.single_variation_wrap').find( '.quantity' ),
                selected_color = variation.attributes.attribute_pa_color;

                // Hide or show qty input
                if ( variation.is_sold_individually === 'yes' ) {
                    $qty.find( 'input.qty' ).val( '1' ).attr( 'min', '1' ).attr( 'max', '' );
                    $qty.hide();
                } else {
                    if( selected_color == 'red' ){
                        $qty.find( 'input.qty' ).attr( 'min', '10' ).attr( 'step', '10' );
                        $qty.show();
                    }else if( selected_color == 'green' ){
                        $qty.find( 'input.qty' ).attr( 'min', '5' ).attr( 'step', '5' );
                        $qty.show();
                    }
                }
            } );
        } )( jQuery );
    </script>
    <?php
}
add_action( 'wp_footer', 'change_quantity_product_for_variation' );

// for cart quantity changes
function change_cart_item_quantity_input_field( $product_quantity, $cart_item_key, $cart_item ) {
    $product = $cart_item['data'];
    if( $cart_item['variation_id'] == 0 ) return $product_quantity;
    if( !$cart_item['variation'] ) return $product_quantity;
    if ( ! $product->is_sold_individually() ) {
        if( $cart_item['variation']['attribute_pa_color'] == 'red' ){
            $product_quantity = woocommerce_quantity_input(
                array(
                    'input_name'   => "cart[{$cart_item_key}][qty]",
                    'input_value'  => $cart_item['quantity'],
                    'max_value'    => $product->get_max_purchase_quantity(),
                    'min_value'    => '10',
                    'step'         => '10',
                    'product_name' => $product->get_name(),
                ),
                $product,
                false
            );
        }elseif( $cart_item['variation']['attribute_pa_color'] == 'green' ){
            $product_quantity = woocommerce_quantity_input(
                array(
                    'input_name'   => "cart[{$cart_item_key}][qty]",
                    'input_value'  => $cart_item['quantity'],
                    'max_value'    => $product->get_max_purchase_quantity(),
                    'min_value'    => '5',
                    'step'         => '5',
                    'product_name' => $product->get_name(),
                ),
                $product,
                false
            );
        }
    }
    return $product_quantity;
}
add_filter( 'woocommerce_cart_item_quantity', 'change_cart_item_quantity_input_field', 99, 3 );