Hide a product but keep it Purchasable

Topic summary

Goal: Keep a product purchasable only as an add‑on while hiding it from the storefront. The item is added on applicable PDPs (Product Detail Pages) via a third‑party customization app.

Most recent guidance:

  • Unpublish the product from the Online Store sales channel while keeping it active, so it can still be added to cart via PDP add‑on flows.
  • Use theme logic to selectively reveal the product when a specific URL parameter is present (e.g., Liquid: if request.query.hidden_item == ‘true’). This keeps it hidden unless explicitly targeted.

Earlier suggestion:

  • Hide the product via custom code and add a checkout safeguard that blocks checkout if this item is the only product in the cart. An app (VTN Checkout Plus) was offered to implement these rules.

Notes: One code snippet (Liquid conditional using a query parameter) and an app link were shared. No images or attachments.

Status: No confirmed resolution from the original poster; the thread remains open with multiple viable approaches.

Summarized with AI on December 18. AI used: gpt-5.

Is it possible to hide an item but still have it be purchasable?

I have an item that cannot be sold by itself, but rather only as an add-on. I already have it added onto the PDP of applicable items through a third party product customization app.

Is there a way to hide the item from the rest of my store so it is not available on it’s own, but still have it be active and purchasable through the PDP?

Appreciate any and all suggestions/help!

Hello @KJL2024

This can be achieved by blocking the checkout if that single product is in the cart.

Additionally, using custom code, we can hide it from the online store. The checkout block will add an extra layer of security as well.
You can use my app: https://apps.shopify.com/vtn-checkout-plus
Let me know if you want me to set up these rules for you.

Hi @KJL2024

It is possible to do so by two ways:

  1. Unpublish the product from online store but keep it active.

  2. Add this code to the main theme file or ask your dev to help in implementing

{% if request.query.hidden_item == ‘true’ %}

{% endif %}

Thanks, I hope this solution will work for you.