👨‍💻

Example of Howdy Customer Tag Discount Theme setting

2024/09/26に公開

Here is the example of snippets/price.liquid in Dawn theme.
Make sure to save current backup before modifying your code.
Feel free to contact us for theme setup.

snippets/price.liquid
{% comment %}
  Renders a list of product's price (regular, sale)

  Accepts:
  - product: {Object} Product Liquid object (optional)
  - placeholder: {Boolean} Renders a placeholder price (optional)
  - use_variant: {Boolean} Renders selected or first variant price instead of overall product pricing (optional)
  - show_badges: {Boolean} Renders 'Sale' and 'Sold Out' tags if the product matches the condition (optional)
  - price_class: {String} Adds a price class to the price element (optional)
  - show_compare_at_price: {Boolean} Renders the compare at price if the product matches the condition (optional)

  Usage:
  {% render 'price', product: product %}
{% endcomment %}
{%- liquid
  if use_variant
    assign target = product.selected_or_first_available_variant
  elsif placeholder
    assign target = null
  else
    assign target = product
  endif

  assign compare_at_price = target.compare_at_price
  assign price = target.price | default: 1999
  assign price_min = product.price_min
  assign price_max = product.price_max
  assign available = target.available | default: false
  assign money_price = price | money
  assign money_price_min = price_min | money
  assign money_price_max = price_max | money
  if settings.currency_code_enabled
    assign money_price = price | money_with_currency
    assign money_price_min = price_min | money_with_currency
    assign money_price_max = price_max | money_with_currency
  endif

  if target == product and product.price_varies
    assign money_price = 'products.product.price.from_price_html' | t: price: money_price
  endif
-%}

{% comment %} Howdy Customer Discount START {% endcomment %}
{% if customer %}
  {% assign selectedCollectionMetafields = shop.metafields.howdy-collections-discount-settings.howdy-discount-settings.value %}
  {% assign selectedCollectionIds = selectedCollectionMetafields.selectedCollectionIds %}
  {% assign targetProduct = false %}
  {% if selectedCollectionIds %}
    {% comment %}
      CheckselectedCollectionIds value
      ・selectedCollections exists & has no value → All products discount
      ・selectedCollections exists & has value → Certain produsts discount
    {% endcomment %}
    {% if selectedCollectionIds == blank %}
      {% assign targetProduct = true %}
    {% else %}
      {% if product.collections %}
        {% for collection in product.collections %}
          {% assign collectionGid = "gid://shopify/Collection/" | append: collection.id %}
          {% if selectedCollectionIds contains collectionGid %}
            {% assign targetProduct = true %}
          {% endif %}
        {% endfor %}
      {% endif %}
    {% endif %}
  {% else %}
    {% comment %} 
      selectedCollections is not set yet → All products discount 
    {% endcomment %}
    {% assign targetProduct = true %}
  {% endif %}
  {% if targetProduct == true %}
    {% assign discountValues = shop.metafields.howdy-order-discount-settings.howdy-discount-settings.value %}
    {% assign discountCustomer = false %}
    {% assign discountPercentage = 0 %}
    {% comment %} Discount Exists {% endcomment %}
    {% if discountValues %}
      {% comment %} Detect Discount Percentage {% endcomment %}
      {% for discount in discountValues %}
        {% if customer.tags contains discount.tagName %}
          {% assign currentDiscountPercentageNumber = 0 | plus: 0 %}
          {% assign newDiscountPercentageNumber = discount.discountPercent | plus: 0 %}
          {% if newDiscountPercentageNumber > currentDiscountPercentageNumber %}
            {% assign discountPercentage = newDiscountPercentageNumber %}
          {% endif %}
        {% endif %}
      {% endfor %}
      {% assign discountPercentage = 100 | minus: discountPercentage %}
      {% assign discountPercentageTimes = discountPercentage | divided_by: 100.0 %}
      {% comment %} Reassign Prices {% endcomment %}
      {%- liquid
        if use_variant
          assign target = product.selected_or_first_available_variant
        elsif placeholder
          assign target = null
        else
          assign target = product
        endif
      
        assign compare_at_price = target.price
        assign price = target.price | times: discountPercentageTimes
        assign price_min = product.price_min | times: discountPercentageTimes
        assign price_max = product.price_max | times: discountPercentageTimes
        assign available = target.available | default: false
        assign money_price = price | money
        assign money_price_min = price_min | money
        assign money_price_max = price_max | money
        if settings.currency_code_enabled
          assign money_price = price | money_with_currency
          assign money_price_min = price_min | money_with_currency
          assign money_price_max = price_max | money_with_currency
        endif
      
        if target == product and product.price_varies
          assign money_price = 'products.product.price.from_price_html' | t: price: money_price
        endif
      -%}
    {% endif %}
  {% endif %}
{% endif %}
{% comment %} Howdy Customer Discount END {% endcomment %}


{%- unless target == null and placeholder == null -%}
  <div
    class="
      price
      {%- if price_class %} {{ price_class }}{% endif -%}
      {%- if available == false %} price--sold-out{% endif -%}
      {%- if compare_at_price > price and product.quantity_price_breaks_configured? != true %} price--on-sale{% endif -%}
      {%- if compare_at_price > price and product.quantity_price_breaks_configured? %} volume-pricing--sale-badge{% endif -%}
      {%- if product.price_varies == false and product.compare_at_price_varies %} price--no-compare{% endif -%}
      {%- if show_badges %} price--show-badge{% endif -%}
    "
  >
    <div class="price__container">
      {%- comment -%}
        Explanation of description list:
          - div.price__regular: Displayed when there are no variants on sale
          - div.price__sale: Displayed when a variant is a sale
      {%- endcomment -%}
      <div class="price__regular">
        {%- if product.quantity_price_breaks_configured? -%}
          {%- if show_compare_at_price and compare_at_price -%}
            {%- unless product.price_varies == false and product.compare_at_price_varies %}
              <span class="visually-hidden visually-hidden--inline">
                {{- 'products.product.price.regular_price' | t -}}
              </span>
              <span>
                <s class="price-item price-item--regular variant-item__old-price">
                  {% if settings.currency_code_enabled %}
                    {{ compare_at_price | money_with_currency }}
                  {% else %}
                    {{ compare_at_price | money }}
                  {% endif %}
                </s>
              </span>
            {%- endunless -%}
          {%- endif -%}
          <span class="visually-hidden visually-hidden--inline">{{ 'products.product.price.regular_price' | t }}</span>
          <span class="price-item price-item--regular">
            {{-
              'products.product.volume_pricing.price_range'
              | t: minimum: money_price_min, maximum: money_price_max
            -}}
          </span>
        {%- else -%}
          <span class="visually-hidden visually-hidden--inline">{{ 'products.product.price.regular_price' | t }}</span>
          <span class="price-item price-item--regular">
            {{ money_price }}
          </span>
        {%- endif -%}
      </div>
      <div class="price__sale">
        {%- unless product.price_varies == false and product.compare_at_price_varies %}
          <span class="visually-hidden visually-hidden--inline">{{ 'products.product.price.regular_price' | t }}</span>
          <span>
            <s class="price-item price-item--regular">
              {% if settings.currency_code_enabled %}
                {{ compare_at_price | money_with_currency }}
              {% else %}
                {{ compare_at_price | money }}
              {% endif %}
            </s>
          </span>
        {%- endunless -%}
        <span class="visually-hidden visually-hidden--inline">{{ 'products.product.price.sale_price' | t }}</span>
        <span class="price-item price-item--sale price-item--last">
          {{ money_price }}
        </span>
      </div>
      <small class="unit-price caption{% if product.selected_or_first_available_variant.unit_price_measurement == nil %} hidden{% endif %}">
        <span class="visually-hidden">{{ 'products.product.price.unit_price' | t }}</span>
        <span class="price-item price-item--last">
          <span>{{- product.selected_or_first_available_variant.unit_price | money -}}</span>
          <span aria-hidden="true">/</span>
          <span class="visually-hidden">&nbsp;{{ 'accessibility.unit_price_separator' | t }}&nbsp;</span>
          <span>
            {%- if product.selected_or_first_available_variant.unit_price_measurement.reference_value != 1 -%}
              {{- product.selected_or_first_available_variant.unit_price_measurement.reference_value -}}
            {%- endif -%}
            {{ product.selected_or_first_available_variant.unit_price_measurement.reference_unit }}
          </span>
        </span>
      </small>
    </div>
    {%- if show_badges -%}
      <span class="badge price__badge-sale color-{{ settings.sale_badge_color_scheme }}">
        {{ 'products.product.on_sale' | t }}
      </span>

      <span class="badge price__badge-sold-out color-{{ settings.sold_out_badge_color_scheme }}">
        {{ 'products.product.sold_out' | t }}
      </span>
    {%- endif -%}
  </div>
{% endunless %}



Discussion