> For the complete documentation index, see [llms.txt](https://help.dollarlabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.dollarlabs.io/dollarlabs-b2b-custom-pricing/show-final-prices-on/product-page.md).

# Product page

The Product Price V2 block — showing the buyer's real price on the product page, with strike-through originals, currency codes and login gating.

**Product Price V2** replaces the theme's price with the price the signed-in customer will actually pay.

## Before you start

* Pricing is configured and the price list is **enabled**.
* Your theme is Online Store 2.0, so it supports app blocks.

## Adding the block

1. **Online Store → Themes → Customize**.
2. Open the **Product → Default product template** — or whichever template is assigned to the products you are testing.
3. **Add block → Apps → Product Price V2**.
4. Position it where the theme's price sits.
5. **Save**.

{% hint style="info" %}
Most themes will now show two prices — theirs and ours. Hide the theme's native price block so only ours renders. If your theme does not allow hiding it, contact support.
{% endhint %}

## Settings

<table><thead><tr><th width="290">Setting</th><th>What it does</th><th width="130">Default</th></tr></thead><tbody><tr><td><strong>Show original price</strong></td><td>When the product is discounted, show the catalog price struck through beside the buyer's price.</td><td>on</td></tr><tr><td><strong>Show compare at price for non-discounted price</strong></td><td>When there is <em>no</em> wholesale discount, show the compare-at price struck through instead. MSRP-style framing.</td><td>off</td></tr><tr><td><strong>Show currency code</strong></td><td>Print the currency code beside the price.</td><td>off</td></tr><tr><td><strong>Currency code position</strong></td><td><code>left</code> (<code>USD 700</code>) or <code>right</code> (<code>700 USD</code>).</td><td><code>right</code></td></tr><tr><td><strong>Hide price without login</strong></td><td>Hide prices from logged-out visitors and show the sign-in message instead.</td><td>on</td></tr><tr><td><strong>Sign in message</strong></td><td>The HTML shown in place of a hidden price.</td><td><code>&#x3C;p>Sign in to see price&#x3C;/p></code></td></tr><tr><td><strong>Hyperlink to login page on sign in message</strong></td><td>Turn that message into a link to the login page.</td><td>on</td></tr><tr><td><strong>Show Unit Price</strong></td><td>Show a secondary unit price beneath the main price — per litre, per sheet, per kg.</td><td>off</td></tr><tr><td><strong>Unit price expression</strong></td><td>How the unit price is derived.</td><td>—</td></tr><tr><td><strong>Unit price metafield</strong></td><td>A Liquid value supplying the unit quantity, typically a product metafield.</td><td>—</td></tr><tr><td><strong>Unit price label</strong></td><td>Text after the unit price.</td><td><code>each</code></td></tr><tr><td><strong>CSS</strong></td><td>Your own CSS for the block.</td><td>—</td></tr></tbody></table>

## Gating prices behind login

**Hide price without login** is on by default, and it is how most wholesale stores want to behave — prices are commercially sensitive, and showing retail prices to a logged-out trade buyer invites confusion.

Pair it with a **Sign in message** that says something useful. "Sign in to see your trade pricing" beats "Sign in to see price", especially with the login hyperlink enabled.

{% hint style="warning" %}
This hides the price on the product page. It is not a security control and it does not hide products or prevent purchase. To restrict who can buy, use Shopify's customer account and market settings.
{% endhint %}

## Unit pricing

For products sold by volume or weight, **Show Unit Price** adds a secondary line — "$1.20 per litre" beneath "$14.40".

It needs a source for the unit quantity, which is what **Unit price expression** and **Unit price metafield** provide, usually a product metafield holding the pack size. If you are not already storing that, this is a data exercise before it is a display one.

## Testing

1. Sign in as a customer whose tag has pricing. The wholesale price should show.
2. Sign in as an untagged customer. The retail price should show.
3. Sign out. You should see the sign-in message, if gating is on.
4. Add to cart in each case and confirm the cart agrees with what was displayed.

Step 4 matters — if the product page and the cart disagree, that is a real bug worth reporting.

## When the block does not appear

* You are editing a **different template** to the one assigned to the product you are testing. This is the usual cause.
* You are editing a **different theme** to the one published or previewed.
* The theme is not Online Store 2.0.

## When the price looks wrong

* **Retail price for a tagged customer** — check the tag spelling matches the column exactly, including case. See [Customer tags & columns](/dollarlabs-b2b-custom-pricing/getting-started/customer-tags-and-columns.md).
* **A different price to the one you set** — the customer probably has a second priced tag. [The lowest price wins](/dollarlabs-b2b-custom-pricing/getting-started/how-pricing-works.md).
* **No price at all** — the price list may be disabled, or gated by a [rule](/dollarlabs-b2b-custom-pricing/price-list/payment-and-delivery-rules.md).
