Hide price in collections and product pages when it's 0 - Refresh theme

Topic summary

A user working with Shopify’s Refresh theme needed to hide prices and purchase buttons when product prices are set to $0.

Solution provided in two parts:

  1. Hide zero prices: Replace the entire price.liquid file with updated code that conditionally displays prices only when greater than 0

  2. Hide cart/quantity buttons: Add CSS code to theme.liquid (just above </head>) that hides the add-to-cart and quantity selector elements when product.price == 0

Outcome: Both solutions were tested and confirmed working by the original poster. The issue is now resolved.

Summarized with AI on November 10. AI used: claude-sonnet-4-5-20250929.

Hi,
I’m using the Refresh theme, and would like to hide the price and the buy now/add to cart buttons in the products where it’s set at 0 (or if it’s easier, where quantity is set at 0).
I tried looking at some posts but wasn’t able to find a solution, is anyone able to help?
Thanks a lot!
RF

Hey @RogerFunds ,

Can you share the link to your store please? Thanks!

Sorry, it’s this: whileincomo.eu

Hi @RogerFunds ,

This will require updating the price.liquid . If you have not made any updated to price.liquid, you can swap the whole file with below updated codes.

Updated price.liquid

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

  Accepts:
  - product: {Object} Product Liquid object (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
  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 -%}
      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 -%}
    

      {%- 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 %}
            
              {{- 'products.product.price.regular_price' | t -}}
            
            
              <s>
                {% if settings.currency_code_enabled %}
                  {{ compare_at_price | money_with_currency }}
                {% else %}
                  {{ compare_at_price | money }}
                {% endif %}
              </s>
            
          {%- endunless -%}
        {%- endif -%}
        {{ 'products.product.price.regular_price' | t }}
        
          {{- 'products.product.volume_pricing.price_range' | t: minimum: money_price_min, maximum: money_price_max -}}
        
      {%- else -%}
        {{ 'products.product.price.regular_price' | t }}
        {% if price > 0 %}
        
          {{ money_price }}
        
        {% endif %}
      {%- endif -%}
    

    
      {%- unless product.price_varies == false and product.compare_at_price_varies %}
        {{ 'products.product.price.regular_price' | t }}
        
          <s>
            {% if settings.currency_code_enabled %}
              {{ compare_at_price | money_with_currency }}
            {% else %}
              {{ compare_at_price | money }}
            {% endif %}
          </s>
        
      {%- endunless -%}
      {{ 'products.product.price.sale_price' | t }}
      
        {{ money_price }}
      
    

    <small>
      {{ 'products.product.price.unit_price' | t }}
      
        {{- product.selected_or_first_available_variant.unit_price | money -}}
        /
         {{ 'accessibility.unit_price_separator' | t }} 
        
          {%- 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 }}
        
      
    </small>
  

  {%- if show_badges -%}
    
      {{ 'products.product.on_sale' | t }}
    

    
      {{ 'products.product.sold_out' | t }}
    
  {%- endif -%}

Thanks so much @theycallmemakka , this works! Do you know how to also hide the add to cart/quantity buttons in the product page if price is 0?
all the best, RF

Hi @RogerFunds ,

Can you try adding below code on theme.liquid just above

{% if product.price == 0 %}
      
    {% endif %}

Fantastic, you are a rockstar :slightly_smiling_face: