Blog · Guide

How to show wholesale prices to logged-in customers (no theme code)

You want tagged wholesale customers to see their tier price on the product page, in the cart, at checkout, and in Shop Pay. Retail customers see retail. Here is the 2026 pattern that actually works — without injecting Liquid into your theme.

9 min read · Updated May 2026

The job

You want logged-in wholesale customers to see their tier price — on the product page, in cart, at checkout, in Shop Pay, in draft orders. Retail customers and guests see retail. The price the wholesale customer is charged is the same price they saw on the PDP, every time.

Why theme code is the wrong answer

Years of Shopify wholesale tutorials told you to inject Liquid into the theme to swap prices for tagged customers. Don't do this in 2026. Reasons:

  • Shop Pay reads the line item price, not the rendered theme price. Theme tricks make the PDP show one price and Shop Pay charge another. Customers will catch it.
  • The price is calculated by the theme, not stored on the order. Refunds get messy because Shopify doesn't know which discount logic produced the original number.
  • Shopify Scripts is gone after June 30, 2026. Anything that depends on Scripts to compute the price stops working.

The right pattern is: resolve the price before it lands on the cart line — either via a Shopify Function or via tag-driven hidden child variants — so the same number flows into the cart, the order, the refund flow, and Shop Pay.

The pattern, step by step

  1. Tag the customer. In Shopify Admin, give wholesale customers a tag like wholesale-a. Many merchants automate this on signup.
  2. Map the tag to a tier price. In TagTier (or any tag-driven pricing app): create a rule that says #wholesale-a → tier price X.
  3. Publish. TagTier syncs a hidden child variant per tier; the theme block + App Proxy swap the variant for tagged customers.
  4. Verify. Log in as a tagged test customer on a dev store. Add the product to cart. Hit checkout, hit Shop Pay, run a draft order. Every flow should show the same tier price.

The PDP question

The price at checkout is now correct. But what does the PDP show? By default the PDP shows the public retail price — which is wrong for a logged-in wholesale customer.

Two valid approaches:

  • Use the App Proxy. Most pricing apps ship a small theme block that calls the app via App Proxy to fetch the resolved tier price for the logged-in customer, and renders it on the PDP. TagTier ships this; install it once, the PDP price stays in sync.
  • Show the public retail price + a "Your price" callout. If you don't want the App Proxy roundtrip, render the retail price as the headline and add "Your price at checkout: $X" with a small note. Less elegant but does not require theme changes.

The gotchas

Shop Pay shows wrong price

Almost always means your pricing logic lives in the theme rather than in a Function. Move it to a Function.

Cart subtotal doesn't match line items

Caused by stacking discounts that the cart can't reconcile. Either your tier discount is being applied as a Function AND a separate Shopify automatic discount, or you have two pricing apps active. Disable one.

Logged-in retail customer sees wholesale price

You tagged the wrong customer, or the tag-removal flow on un-subscription failed. Audit your customer tags from the Shopify Admin export. TagTier's audit log will show exactly which rule fired for which customer in the last 30 days.

Tighter loop on TagTier

The flow above is documented as a recipe in the Help Center: Wholesale pricing on one storefront.

Real-world example: See how this pattern played out for a real merchant in our case study, read the story →

Try it on your dev store →


Related on TagTier