Shopify - 购买免费产品
Shopify - Free Product with Purchase
代码段允许在指定集合中的产品也存在时将免费产品应用到购物车。如果删除指定集合中的另一产品,免费产品将从购物车中删除。
问题:用户可以添加多个项目,这些项目可能都不是来自指定的集合,然后可以删除指定的集合产品,免费产品将留在购物车中。即,用户可以添加产品以使用免费商品填充购物车,然后添加与该商品相比价格可能为 5 美元的另一商品以填充可能为 50 美元或更多的免费商品。在 return 中,用户购买 5 美元产品可免费获得产品。
下面的代码片段有效,但我希望它更健壮。目前,它的工作原理是将 'product-handle' 替换为购买时提供的免费礼物。如果购物车中存在免费产品和来自指定集合 '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 也将从购物车中删除即使存在其他产品。
尝试将 Shopify Discounts 自动折扣功能与您的脚本一起使用,并对您免费赠送的产品进行评估。以下是创建自动折扣的方法:
- 转到折扣->创建折扣->自动折扣
- 折扣类型select买 X 送 Y
- Select Collection 或您想赠送免费产品的产品
- 填写您要创建的所有其他必要详细信息和规则
现在,只要满足规则,购物车中的产品就会免费,如果不满足规则,就会恢复原价。
代码段允许在指定集合中的产品也存在时将免费产品应用到购物车。如果删除指定集合中的另一产品,免费产品将从购物车中删除。
问题:用户可以添加多个项目,这些项目可能都不是来自指定的集合,然后可以删除指定的集合产品,免费产品将留在购物车中。即,用户可以添加产品以使用免费商品填充购物车,然后添加与该商品相比价格可能为 5 美元的另一商品以填充可能为 50 美元或更多的免费商品。在 return 中,用户购买 5 美元产品可免费获得产品。
下面的代码片段有效,但我希望它更健壮。目前,它的工作原理是将 'product-handle' 替换为购买时提供的免费礼物。如果购物车中存在免费产品和来自指定集合 '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 也将从购物车中删除即使存在其他产品。
尝试将 Shopify Discounts 自动折扣功能与您的脚本一起使用,并对您免费赠送的产品进行评估。以下是创建自动折扣的方法:
- 转到折扣->创建折扣->自动折扣
- 折扣类型select买 X 送 Y
- Select Collection 或您想赠送免费产品的产品
- 填写您要创建的所有其他必要详细信息和规则
现在,只要满足规则,购物车中的产品就会免费,如果不满足规则,就会恢复原价。