自定义数量字段在Woocommerce存档页面上不起作用

问题描述

我已经使用自定义代码为每个产品的“商店”页面和“类别”页面添加了“数量”字段和“添加到购物车”按钮,并且还基于以下参数为数量字段设置了最小数量,最大数量和步长产品ID。这些产品都是葡萄酒,对于其中的某些产品,您可以购买至少6种产品,而步骤6则为6。 6、12、18、24等,对于某些人,您可以购买至少12个,步长为12,例如12、24、36、48等。

这一切都很好,但是数量和价格都没有传递到购物车页面。无论订购多少,数量总是将自己设置为最小值,并且当从“商店”或“类别”页面订购产品时,价格仅在购物车页面显示一个单位。

function wpse_quantity_input_default( $args,$product ) {

    $productID = $product->id;

    foreach( WC()->cart->get_cart() as $key => $item ){

            // MINIMUM / MAXIMUM
            if($productID == '566' || $productID == '562' || $productID == '1177' || $productID == '1181' || $productID == '1183' || $productID == '1185' || $productID == '1242' || $productID == '1250' || $productID == '1251' || $productID == '1252' || $productID == '1254') {

                    $args['input_value'] = 12;
                    $args['max_value']  = 240;  // Maximum value (variations)
                    $args['min_value']  = 12;   // Minimum value (variations)
                    $args['step']       = 12;    // Quantity steps

            } else {

                    $args['input_value'] = 6;
                    $args['max_value']  = 120;  // Maximum value (variations)
                    $args['min_value']  = 6;   // Minimum value (variations)
                    $args['step']       = 6;    // Quantity steps

            }

    } 

return $args;

}

add_filter( 'woocommerce_quantity_input_args','wpse_quantity_input_default',1000,2 );

解决方法

所描述的问题来自Ajax添加到购物车按钮(及其数量字段),因此您应该在问题中提供所有相关代码。

现在,在提供的代码中,无需使用foreach循环即可使事情复杂化。使用in_array()函数可以以更有效的方式简化代码,如下所示:

add_filter( 'woocommerce_quantity_input_args','custom_quantity_input_args',1000,2 );
function custom_quantity_input_args( $args,$product ) {
    $products_ids = array(562,566,1177,1181,1183,1185,1242,1250,1251,1252,1254);
    
    if( in_array( $product->get_id(),$products_ids ) ) {
        $args['input_value'] = 12;
        $args['max_value']  = 240;  // Maximum value (variations)
        $args['min_value']  = 12;   // Minimum value (variations)
        $args['step']       = 12;    // Quantity steps
    } else {
        $args['input_value'] = 6;
        $args['max_value']  = 120;  // Maximum value (variations)
        $args['min_value']  = 6;   // Minimum value (variations)
        $args['step']       = 6;    // Quantity steps
    }
    return $args;
}

代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。