Shopify:更改变体的可用性
Shopify: Change the availability of variants
在我的案例中,Shopify 产品有 5 个变体:Monday, Tuesday, Wednesday, Thursday, Friday
。
我想在 48 小时内限制变体。例如:
星期一 - Wednesday, Thursday, Friday
星期三 - Monday, Tuesday, Friday
周五 - Monday, Tuesday, Wednesday, Thursday
我想知道我是否可以使用标准函数。通过管理面板或 Shopify 的内部结构。
您可以使用 Liquid 过滤掉不想展示的变体,防止购物者将这些产品添加到购物车。
在您的产品模板中,找到行 {% for variant in product.variants %}
在此行之前,添加 {% assign day_of_week = 'now' | date: '%A' %}
以将当前 day-of-week 存储在 Liquid 变量中
在此行之后,添加代码以过滤掉您不想看到的变体(如下)。对于您关心的一周中的每一天,您都需要一个 'when' 语句,然后检查变体的某些 属性(我使用了变体标题)。如果它是您不想显示的变体,请使用 'continue' 语句跳过该变体并继续下一个。
示例:
{% assign day_of_week = 'now' | date: "%A" %}
{% for variant in product.variants %}
<!-- Addition below to filter out products that customer shouldn't see -->
{% case day_of_week %}
{% when 'Monday' %}
{% if variant.title contains 'Monday' or variant.title contains 'Tuesday' %}{% continue %}{% endif %}
{% when 'Tuesday' %}
{% if variant.title contains 'Tuesday' or variant.title contains 'Wednesday' %}{% continue %}{% endif %}
<!-- Repeat for each day of the week -->
{% endcase %}
<!-- Regular code from your variant loop -->
与我的其他答案不同,您还可以使用 Javascript 过滤掉变体。我通常更喜欢通过 Liquid 预过滤变体 - 依赖 Javascript 可能会导致页面加载闪烁,因为变体在代码运行之前会短暂存在。
假设 jQuery 已经在页面上,我们可以这样写:
<script>
jQuery(document).ready(function(){
var variants_list = {{ product.variants | json }};
var date = new Date(Date.now()).toDateString();
for(var i=0; i < variants_list.length; i++){
var variant = variants_list[i];
if(variant.title == 'Monday' && (date.indexOf('Mon') > -1 || date.indexOf('Tue') > -1){
jQuery('[value="' + variant.id + '"]').remove();
//Note: If you theme uses swatches or anything like that, you may need to remove additional elements from the document as well.
}
if(variant.title == 'Tuesday' && (date.indexOf('Tue') > -1 || date.indexOf('Wed') > -1){
jQuery('[value="' + variant.id + '"]').remove();
}
}
//Lather-rinse-repeat for each day of the week that you care about
}
</script>
在我的案例中,Shopify 产品有 5 个变体:Monday, Tuesday, Wednesday, Thursday, Friday
。
我想在 48 小时内限制变体。例如:
星期一 - Wednesday, Thursday, Friday
星期三 - Monday, Tuesday, Friday
周五 - Monday, Tuesday, Wednesday, Thursday
我想知道我是否可以使用标准函数。通过管理面板或 Shopify 的内部结构。
您可以使用 Liquid 过滤掉不想展示的变体,防止购物者将这些产品添加到购物车。
在您的产品模板中,找到行 {% for variant in product.variants %}
在此行之前,添加 {% assign day_of_week = 'now' | date: '%A' %}
以将当前 day-of-week 存储在 Liquid 变量中
在此行之后,添加代码以过滤掉您不想看到的变体(如下)。对于您关心的一周中的每一天,您都需要一个 'when' 语句,然后检查变体的某些 属性(我使用了变体标题)。如果它是您不想显示的变体,请使用 'continue' 语句跳过该变体并继续下一个。
示例:
{% assign day_of_week = 'now' | date: "%A" %}
{% for variant in product.variants %}
<!-- Addition below to filter out products that customer shouldn't see -->
{% case day_of_week %}
{% when 'Monday' %}
{% if variant.title contains 'Monday' or variant.title contains 'Tuesday' %}{% continue %}{% endif %}
{% when 'Tuesday' %}
{% if variant.title contains 'Tuesday' or variant.title contains 'Wednesday' %}{% continue %}{% endif %}
<!-- Repeat for each day of the week -->
{% endcase %}
<!-- Regular code from your variant loop -->
与我的其他答案不同,您还可以使用 Javascript 过滤掉变体。我通常更喜欢通过 Liquid 预过滤变体 - 依赖 Javascript 可能会导致页面加载闪烁,因为变体在代码运行之前会短暂存在。
假设 jQuery 已经在页面上,我们可以这样写:
<script>
jQuery(document).ready(function(){
var variants_list = {{ product.variants | json }};
var date = new Date(Date.now()).toDateString();
for(var i=0; i < variants_list.length; i++){
var variant = variants_list[i];
if(variant.title == 'Monday' && (date.indexOf('Mon') > -1 || date.indexOf('Tue') > -1){
jQuery('[value="' + variant.id + '"]').remove();
//Note: If you theme uses swatches or anything like that, you may need to remove additional elements from the document as well.
}
if(variant.title == 'Tuesday' && (date.indexOf('Tue') > -1 || date.indexOf('Wed') > -1){
jQuery('[value="' + variant.id + '"]').remove();
}
}
//Lather-rinse-repeat for each day of the week that you care about
}
</script>