Shopify Price on Request: Hiding Prices in Dawn Theme Without an App

Hey everyone! I recently stumbled upon a really common question in the Shopify community that resonated with a lot of store owners, especially those on the popular Dawn theme: "How do I hide prices for specific products and display 'Price on Request' instead, all without relying on an app?"

It's a fantastic question because, let's be honest, not every product fits a standard e-commerce mold. Think high-end custom items, B2B wholesale, or services that require a personalized quote. The community discussion around this was incredibly insightful, with several experts and fellow merchants chiming in with robust solutions and crucial warnings. So, let's dive into what we learned and how you can implement this for your store.

Choosing Your Approach: Product Tags vs. Metafields & Custom Templates

The thread highlighted two main paths to achieve this, both involving direct theme customization (which is exactly what the original poster, snk729, was looking for!).

Option 1: The Product Tag Method (Quick & Simple for Fewer Products)

This approach was championed by community members like dinesh_kumar, mastroke, and Custom-Cursor, who suggested it's a great choice for a smaller number of products (like the 10-12 snk729 initially mentioned). It's quick to set up and doesn't require creating new templates, though it does involve modifying your theme's Liquid files.

Here's how to do it:

  1. Add a Specific Tag to Your Products: For each product where you want to hide the price, go to its product page in your Shopify admin and add a unique tag, for example, price-on-request.

  2. Modify Your Price Snippet: Navigate to Online Store > Themes > Actions > Edit code. Look for a file like snippets/price.liquid or wherever your theme outputs product prices. You'll need to wrap the existing price code with a conditional statement:

    {% if product.tags contains ‘price-on-request’ %}
    
    

    Price on Request

    {% else %} {%- comment -%} {%- comment -%} Existing price code stays here, usually something like: {%- endcomment -%} {{ product.price | money }} {%- endcomment -%} {% endif %}

    This snippet, inspired by mastroke and dinesh_kumar, checks for the tag. If present, it shows "Price on Request"; otherwise, it displays the normal price.

  3. Hide the Add to Cart Button: You'll likely want to remove the "Add to Cart" button for these products too. Find your buy button code, often in snippets/product-form.liquid or sections/main-product.liquid, and wrap it in a similar unless condition:

    {% unless product.tags contains ‘price-request’ %}
    {%- comment -%}
      {%- comment -%} Existing buy button code stays here {%- endcomment -%}
    {% endunless %}
  4. Add Styling (CSS): You might need to add some CSS (in theme.css or base.css) to style your .price-request text to match your brand.

Option 2: The Metafield & Custom Template Approach (Scalable & Robust)

This is the method snk729 initially proposed and was validated by devcoders as a "clean and scalable solution." It's a bit more structured and ideal if you have many products, or if you want more control over the specific layout of "Price on Request" products.

Here's how to do it:

  1. Create a Product Metafield: Go to Settings > Custom data > Products. Add a new metafield definition. Name it something like "Price on Request" with a namespace (e.g., custom.price_on_request) and choose "True or false" as its type. This acts as a toggle for your special pricing.

  2. Create a Separate Product Template: In your theme editor (Online Store > Themes > Actions > Edit code), under "Templates," click "Add a new template." Choose "Product" and name it price-request. This creates a duplicate of your default product template.

  3. Customize the New Template: In your new product.price-request.liquid template (or the relevant section it calls, often sections/main-product.liquid), locate the code that displays the product price and the "Add to Cart" button. Replace these sections with your "Price on Request" text, a contact form snippet, or a button linking to a contact page. You'll use your metafield to control this display:

    {% if product.metafields.custom.price_on_request.value %}
      

    Price on Request

    Inquire Now {% else %}
    {{ product.price | money }}
    {% endif %}

    You'll need to apply similar logic to your product cards in collection grids (e.g., in snippets/card-product.liquid) to ensure the price is hidden there too, as snk729 did.

  4. Assign Template and Metafield: For each product requiring "Price on Request," go to its product page in the Shopify admin. In the "Theme template" section, select your new price-request template. Then, scroll down to the "Metafields" section and set your "Price on Request" metafield to true.

The Critical Caveats: Don't Forget the Hidden Traps!

This is where the community discussion really shined, thanks to crucial insights from tim_tairli and devcoders. Hiding the price on your product page is just the first step. You need to be thorough!

  • Structured Data (SEO): As tim_tairli pointed out, search engines like Google often pull prices from your product's structured data (Schema.org). If you leave this untouched, Google might still display a price in search results, even if it's hidden on your site. You'll need to modify the main-product.liquid (or similar) section that generates this data.

    You might need to wrap this in your metafield/tag condition or remove it entirely for these specific products. However, tim_tairli also warned that "Google does not like products without price," so be mindful of potential SEO impacts.

  • JSON/JS Endpoints: Shopify provides product data via JSON or JavaScript endpoints (e.g., /products/product-handle.json). As tim_tairli correctly noted, these endpoints will still reveal the price if it's set on the product. There's no easy way to hide this data without an app that intercepts requests or custom backend work. For most merchants, this might be an acceptable risk, but it's important to be aware of.

  • Other Price Displays: Devcoders emphasized the need to "double-check that the price is also hidden anywhere else it may appear." This includes:

    • Search results: On your store's internal search page.
    • Quick view popups: If your theme has them.
    • Featured products/related products sections: On other pages.
    • The Cart: Ensure products added to the cart don't suddenly show a price.
    • Product Feeds: If you're using feeds for Google Shopping or other channels, these will also need conditional logic to exclude products or modify their pricing data.

Both the product tag and metafield approaches are solid, app-free ways to tackle this. The metafield route offers a bit more flexibility and cleanliness in your admin, especially as your product catalog grows. Whichever you choose, remember to test thoroughly across your entire store to catch any lingering price displays. The community's collective wisdom really shines here, helping us not just solve the immediate problem but also anticipate potential pitfalls!

Share:

Use cases

Explore use cases

Agencies, store owners, enterprise — find the migration path that fits.

Explore use cases