这是一个非常具体的问题,但我们在 WooCommerce 网站上安装了 Autoship Cloud 插件,因此我们可以提供一次性购买和每月自动发货选项。我们的客户只有 1 种可自动发货的产品,他们希望限制客户一次只能自动发货 6 种。
我不太精通编码,但我已经完成了 99% 的工作,在我的functions.php中使用以下代码片段:
add_action( 'woocommerce_before_cart', 'custom_total_item_quantity_message' );
function custom_total_item_quantity_message() {
$max_count = 6;
$product_id = 275;
$in_cart = false;
foreach( WC()->cart->get_cart() as $cart_item ) {
$product_in_cart = $cart_item['product_id'];
if ( $product_in_cart === $product_id ) $in_cart = true;
$item = $cart_item['data'];
if(!empty($item)) {
$quantity = $cart_item['quantity'];
}
}
if( is_cart() && $in_cart && $quantity > $max_count ){
echo '<div class="woocommerce-info">';
printf( __("<style>.autoship-yes, .autoship-schedule-options .autoship-frequency.active{display: none !important;}</style>Sorry, Autoship is only available for 6 bottles or less.", "woocommerce"), $max_count - $quantity );
wc_enqueue_js( "
$('div.woocommerce').on('click', 'input.qty', function(){
$('.autoship-no-radio').prop('checked', true).trigger('click');
});
$(document).ready(function() {
$('.autoship-no-radio').prop('checked', true).trigger('click');
});
" );
echo '</div>';
}
}
基本上,代码的作用是隐藏“自动发货”单选按钮,并在将超过 6 个特定产品(产品 ID=275)添加到购物车时自动选择“一次性购买”单选按钮。当有人从一开始就向购物车添加超过 6 个商品时, $(document).ready(function() 脚本会正确触发,但 $('div.woocommerce').on('click', 'input.qty' ,如果添加到购物车的数量少于 6 个,则 function() 脚本不起作用,然后用户更新数量。
当代码只侦听购物车中总共 6 件商品时,代码工作得很好,但是在我添加这部分之后:
$product_id = 275;
$in_cart = false;
foreach( WC()->cart->get_cart() as $cart_item ) {
$product_in_cart = $cart_item['product_id'];
if ( $product_in_cart === $product_id ) $in_cart = true;
$item = $cart_item['data'];
if(!empty($item)) {
$quantity = $cart_item['quantity'];
}
}
因此它仅适用于该特定产品,它停止工作。
但是,一旦您将数量勾选到 7,函数本身就可以正常工作,但 $('div.woocommerce').on('click', 'input.qty', function() 脚本不会触发:
相比之下,当从一开始就将超过 6 个产品添加到购物车时,整个事情就会按预期进行:
可能还值得一提的是,我添加了一个功能,可以在数量或自动发货单选按钮更新时自动更新购物车:
add_action( 'wp_footer', 'bbloomer_cart_refresh_update_qty' );
function bbloomer_cart_refresh_update_qty() {
if ( is_cart() || ( is_cart() && is_checkout() ) ) {
wc_enqueue_js( "
$('div.woocommerce').on('change', 'input, select', function(){
$('[name=\'update_cart\']').trigger('click');
});
" );
}
}
你能解决这个问题吗?我们遇到了完全相同的问题。我们试图限制用户可以购买的数量(仅适用于自动发货订单),同时允许他们一次性购买他们想要的任何数量。任何信息都会非常有帮助!