【问题标题】:Custom quantity in cart for specific product特定产品的购物车中的自定义数量
【发布时间】:2019-09-12 06:23:08
【问题描述】:

我为特定产品创建了一个函数。客户可以选择物体的颜色。如果客户选择“RED”,在单个产品页面中输入的数量会更改为 select dropdwon 10,20,30,40,50 ...

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

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

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

但我的数量我不知道根据颜色更改自定义选择的数量输入字段。 我想为红色显示 slect 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 返回两个产品中的最后一个数字

【问题讨论】:

    标签: woocommerce


    【解决方案1】:

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

    // 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 );
    

    【讨论】:

    • 嗨 itzmekhokan 我的产品不是可变产品。我在我的代码中添加了一个自定义输入 before_add_to_cart_button
    • 我找到了解决我的代码问题的方法!!! thx 使用过滤器 woocommerce_cart_item_quantity 和 $cart_item['data'] 我在产品中检索了我的“颜色”并更改了数量
    猜你喜欢
    • 2017-12-10
    • 2021-11-27
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多