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>