【发布时间】:2019-08-21 12:06:30
【问题描述】:
当指定集合中的产品也存在时,Snippet 允许将免费产品应用到购物车。如果指定集合中的另一个产品被删除,免费产品将从购物车中删除。
问题:用户可以添加多个可能不来自指定集合的项目,然后可以删除指定集合产品,免费产品将留在购物车中。即,用户可以添加产品以使用免费商品填充购物车,然后添加另一个可能为 5 美元的商品,而该商品则填充可能为 50 美元或更多的免费商品。作为回报,用户购买 5 美元产品可获得免费产品。
下面的 sn-p 有效,但我希望它更强大。目前,它通过将“产品手柄”替换为购买时提供的免费礼物来工作。仅当购物车中存在免费产品和指定集合“collection-handle”中的产品时,它才会填充免费产品。如果集合中的产品被移除,则免费物品也会从购物车中移除。
问题:可以添加多个项目,并删除包含免费项目和结帐的原始产品。
正在寻找从商品中删除免费产品的解决方案,除非购物车中存在指定集合中的产品。
{% assign product = all_products['PRODUCT-HANDLE'] %}
{% unless cart.item_count == 0 or product.empty? or product.variants.first.available == false %}
{% assign variant_id = product.variants.first.id %}
{% assign found = false %}
{% unless cart.item_count < 1 %}
{% for line_item in cart.items %}
{% for collection in line_item.product.collections %}
{% if collection.handle == 'COLLECTION_HANDLE' %}
{% assign found = true %}
{% break %}
{% endif %}
{% endfor %}
{% endfor %}
<script>
(function($) {
var cartItems = {{ cart.items | json }},
qtyInTheCart = 0,
cartUpdates = {};
for (var i=0; i<cartItems.length; i++) {
if ( cartItems[i].id === {{ variant_id }} ) {
qtyInTheCart = cartItems[i].quantity;
break;
}
}
if ( ( cartItems.length === 1 ) && ( qtyInTheCart > 0 ) ) {
cartUpdates = { {{ variant_id }}: 0 }
}
else if ( ( cartItems.length >= 1 ) && ( qtyInTheCart !== 1 ) && {{found}} == true ) {
cartUpdates = { {{ variant_id }}: 1 }
}
else {
return;
}
var params = {
type: 'POST',
url: '/cart/update.js',
data: { updates: cartUpdates },
dataType: 'json',
success: function(stuff) {
window.location.href = '/cart';
}
};
$.ajax(params);
})(jQuery);
</script>
{% endunless %}
{% endunless %}
我希望结果是,如果产品 A 被添加到购物车,那么购物车将填充免费提供的产品 B。如果产品 A 被移除或不存在于购物车中,那么产品 B 也会从购物车中移除,即使有其他产品。
【问题讨论】:
-
以简约的方式,如果购物车的总价格低于某个值,假设购物车价值低于 50 美元并且免费产品被移除,我希望将免费产品从购物车中移除。所以我尝试使用 {% unless cart.total_price
-
A) 这样的事情很容易被黑客攻击,所以要注意 B) 在 Checkout 按钮上添加一个点击监听器,并检查购物车是否正常 C) 请注意 Shopify Plus 不会受到这些废话的影响,但使用起来更贵
-
@DavidLazar 您是否有其他选择可以将带有特定产品的免费商品添加到购物车?不幸的是,Shopify Plus 现在不在预算之内,希望在未来。
标签: javascript shopify liquid