Guide

Show the discounted price on your product pages

The price your shopper will actually pay, under the theme price, in their currency, with a savings badge and an optional discount code. Five minutes to set up, nothing to touch in your theme's code.

Overview

What it does

Your automatic product discounts are applied in the cart. Until then, the product page shows the full price. Pixoo adds the price the shopper will actually pay, right under it.

Discounted price and savings badge

On product pages and collection cards, a line shows the theme price struck through, the discounted price, and a badge such as "Save $3.50". The amount is the one you configured for the shopper's currency, so it matches the cart to the cent.

On by default for every safe automatic discount, one switch per discount to turn it off.

Discount code badge

Optionally, a badge shows the code that applies to this product in the shopper's market, with what it is worth. One click copies it. Nothing is published until you switch on the surface and each code.

Off by default. Your codes stay private until you decide otherwise.

A Shopify product page with the theme price struck through, the discounted price, a Save badge, and a line naming the automatic discount
A product page on the Horizon theme. Pixoo adds the second price line, the badge, and the line naming the discount. The theme keeps its own price above.

One rule behind everything on this page

The page only shows a price the checkout will honour. When Pixoo cannot be exact about a discount, it shows nothing for it and tells you why in the admin. A missing price costs you a nudge; a wrong price costs you a customer.

Requirements

Before you start

Three things, and you probably have all of them already.

  • At least one product discount created in Pixoo. Automatic or code, a fixed amount or a percentage, on specific products or on collections. Order discounts and shipping discounts do not show on product pages.
  • An Online Store 2.0 theme. Horizon, Dawn, and most themes from the Shopify Theme Store. Pixoo finds the price element by itself on these; on a custom theme, an app block does the job. Both are covered below.
  • Five minutes. The setup is two switches and one theme editor visit, most of it done once for both storefront features.

Setup

Set it up

Everything is configured from Pixoo, not from the theme editor. The theme editor is only visited once, to activate the app embed.

  1. 1

    Activate the Pixoo storefront app embed

    In your Shopify admin, open Pixoo, then Storefront, then the Prices & codes tab. Next to App embed, click Open theme editor. Your theme editor opens on the app embeds panel: toggle Pixoo storefront on, then click Save in the editor.

    Back in Pixoo, the status next to App embed reads "Active" once the script has run on your storefront. Open any product page of your store to trigger it, then click Check the status.

    This embed is shared with the cart progress bar. If you already activated it for the bar, this step is done.

  2. 2

    Turn on discounted prices

    In the section Show discounted prices on product and collection pages, switch on Show discounted prices. Choose where the line appears: Product pages, Collection cards, or both. Click Save in the bar at the top.

    The Prices & codes tab in Pixoo with the Show discounted prices switch on, the App embed status, and the product page block row
    The Prices & codes tab. The two switches on the right are the whole activation: one for prices, one for codes.
  3. 3

    Check which discounts are shown

    The section Which discounts are shown lists every product discount of your store. Each automatic discount reads Shown, Off, or Excluded with the reason in plain words. Use the switch on the right to hide a discount you would rather keep as a cart surprise. The change applies without saving the page.

    The same switch lives on the discount itself: open a product discount in Pixoo and look for the Storefront card, right after the customer message.

    The Which discounts are shown section listing automatic discounts marked Shown, Off, or Excluded with a reason, and code discounts below
    Automatic discounts first, code discounts below. An excluded discount says why, so you can change the discount rather than guess.
  4. 4

    See it on your store

    Open a product covered by one of the shown discounts. The line appears under the theme price. Add the product to the cart: the cart total confirms the same price.

    A change made in Pixoo can take up to ten minutes to reach the storefront, because the storefront keeps a copy of your settings for five minutes and your browser may keep one too. Open the page in a private window if you want to see it right away.

    To understand what the page decided, add ?pixoo_debug=1 to the product URL. A panel in the bottom left corner lists the discounts received, whether each one applies to this product and why, and where the line was placed. Only you see it, and only with that parameter.

    The Pixoo diagnostic panel on a product page, listing the discounts served, the selected variant and price, and where the line was mounted
    The diagnostic panel, opened with ?pixoo_debug=1. When something does not show, the answer is usually on this panel.

Optional

Show a discount code on the product page

A code badge turns a discount you would otherwise have to advertise into something the shopper finds where they decide. It is off until you say otherwise, twice.

  1. 1

    Switch on the surface

    In Show discount codes on product pages, switch on Show discount codes and save. Nothing is visible yet: this only opens the door.

  2. 2

    Switch on each code

    In Which discounts are shown, the code discounts are listed below the automatic ones, all Off. Switch on the ones you want to publish. Codes you leave off, and every code you create later, stay private.

  3. 3

    What the shopper sees

    A badge with the code and what it is worth on this item, for example "Use code SUMMER10, 10% off this item". A click copies the code and shows a short confirmation; the shopper enters it at checkout as usual. On a store with market codes, the badge shows the code of the shopper's market.

    A product page showing a code badge under the price, reading Use code and the value of the code on this item
    The code badge. One click copies the code; the price itself is not changed, since the code is applied at checkout.

Automatic discounts win over codes

Shopify applies one product discount per item and picks the best one. If an automatic discount already prices the product, a code on the same product would be refused at checkout, so Pixoo shows the discounted price and no code badge on that product. The badge appears on the products the automatic discount does not cover.

The discountWhat happens
A single code, with or without market codesShown once you switch the code on. The shopper sees the code that matches their market.
Bulk codesNever shown. Bulk codes are single-use and meant for one recipient each.
Code close to its usage limitHidden when fewer than 10% of uses remain, so nobody copies a code that just ran out.
Once per customerShown with a "once per customer" mention. The page cannot know whether this shopper already used it.
Product already discounted by an automatic discountNo badge on that product. Shopify applies one product discount per item, so the code would be refused there.

Themes

Placement on your theme

Three ways to place the line, from the one that needs nothing to the one that works on any theme.

Automatic placement

By default Pixoo finds the price element of the product page and of the collection cards by itself. Horizon, Dawn, and the themes built on them need nothing else. The line is inserted right after the theme price and inherits your theme's font.

The app block, for custom themes

If the line does not show, or lands in the wrong place, add the Pixoo product price block where you want it. In Pixoo, click Open the product template next to Product page block. In the theme editor, open the group that holds your price (on Horizon it is called Details), click Add block, then Apps, then Pixoo product price. Drag it right under the price and save. The line then renders inside the block, whatever the theme does with its own price markup.

The theme editor cannot drop an app block inside a group from a link, which is why the block is added by hand from the group itself. Once placed, the line stays there across theme updates.

The Shopify theme editor with the Details group open, showing Add block, Apps, and the Pixoo product price block under the price
Adding the block on Horizon: Details group, Add block, Apps, then Pixoo product price. Typing pixoo in the search finds both Pixoo blocks.

Custom selectors, as a last resort

The Advanced section of the tab accepts a CSS selector for the product page price and another for the collection card price. Use them only if neither the automatic placement nor the block suits your theme. Empty means automatic. If you are not sure what to type, send us the store URL and we will send you the selector.

Reference

Every setting, explained

The Prices & codes tab, section by section, in the order you see it. For each field: what it is, what it changes on your store, and its default.

Show discounted prices on product and collection pages

The first section is the activation of the price line itself.

Show discounted prices

Switch · Default: off

The master switch for the price line and the savings badge. Off: nothing from this feature is visible on your store, on any product, and your other settings are kept for later. On: every automatic discount marked Shown in the list below gets its line. This switch does not control the code badge, which has its own.

App embed

Status, with Open theme editor

Not a setting but a check. It tells you whether the Pixoo storefront app embed is on in your live theme and whether the script has run recently: "Not activated yet", "Activated", then "Active · seen 2 minutes ago" once a shopper or you opened a page. Open theme editor takes you to the app embeds panel of your live theme. App embeds are per theme: a draft or preview theme needs its own activation.

Product page block

Link, Open the product template

Optional. Opens your product template in the theme editor so you can add the Pixoo product price block by hand, right under the price. Only needed when the automatic placement does not find or misplaces the line. See Placement above.

Product pages

Checkbox · Default: on

Shows the line on the product page, under the price of the selected variant. It follows the variant the shopper picks.

Collection cards

Checkbox · Default: on

Shows the line on the product cards of collection pages, for the first fifty products of the collection. Untick it if your cards are too tight for a second price line.

Show discount codes on product pages

Show discount codes

Switch · Default: off

Opens the code badge surface. On its own it publishes nothing: every code is still off in the list below until you switch it on individually. Off: no code badge anywhere, even for codes you had switched on, which stay ready for when you switch the surface back on. Independent from the price switch: you can show codes without showing prices, and the other way round.

Which discounts are shown

One row per product discount of your store, automatic discounts first, code discounts below. The rows update when you open the tab; no saving needed, each switch applies at once.

Shown

Status

The discount qualifies, its switch is on, and the surface is on. Shoppers see it on the products it covers.

Ready

Status

The discount qualifies and its switch is on, but the surface switch at the top is off. Nothing is visible yet; switch the surface on and this row becomes Shown.

Off

Status

The discount qualifies but you switched it off. It keeps applying in the cart as usual; it is simply not announced on the product page.

Excluded

Status, with the reason

The page cannot be exact about this discount, so it will not show it. The reason is written under the discount name, and the table in "Which discounts qualify" below explains each one. Change the discount to make it qualify; there is no override.

Show [discount name]

Switch per automatic discount · Default: on

Whether this automatic discount gets a price line. On by default because the discount already applies to every shopper in the cart, so announcing it changes nothing about who gets it. Turn it off to keep a discount as a cart surprise.

Show code [discount name]

Switch per code discount · Default: off

Whether this code is shown in a badge. Off by default, always: a code is something you chose to give to some people, and Pixoo never publishes it on your behalf. New codes start off too.

Texts

One field per message the shopper can read. The buttons above the fields pick the language you are editing; a shopper sees the language of the storefront they browse. An empty field means Pixoo's default in that language, so you only type what you want to change. The buttons under a field insert the tokens it accepts; a token is replaced on the page by the real value.

Badge next to the discounted price

Text, with a Show checkbox · Default: "Save {{amount}}"

The badge shown after the discounted price, for automatic discounts. {{amount}} is the saving for one unit, in the shopper's currency. Untick the checkbox next to the field to remove the badge entirely and keep only the two prices.

Line under the price (automatic discounts)

Text, with a Show checkbox · Default: "Applied automatically in your cart · {{title}}"

The small line under the prices that tells the shopper the discount will apply by itself, with the discount's name in {{title}}. Untick the checkbox to remove this line; the prices and the badge stay. The line is also left out automatically when two discounts tie, since the page cannot tell which name the checkout will use.

Hint for discounts with a minimum quantity

Text · Default: "{{value}} off from {{quantity}} items"

Shown instead of a discounted price when the discount needs a minimum number of items, since one unit does not qualify yet. {{value}} is the discount (for example 10% or $5), {{quantity}} the minimum.

Mention when a discount caps the number of items

Text · Default: "max. {{max}} items"

Added after the badge when the discount applies to a limited number of items per order. {{max}} is that limit.

Code badge label

Text · Default: "Use code {{code}}"

The first part of the code badge. {{code}} is the code itself, the one for the shopper's market when you use market codes.

Code badge value

Text · Default: "{{value}} off this item"

The second part of the badge, what the code is worth on this product. {{value}} is the discount as configured (a percentage or an amount in the shopper's currency).

Message after the code is copied

Text · Default: "Code {{code}} copied. Enter it at checkout."

The short confirmation shown for a few seconds after the shopper clicks the badge.

Mention for once-per-customer codes

Text · Default: "once per customer"

Added to the badge when the code is limited to one use per customer, so the shopper is not surprised at checkout if they already used it.

Appearance

How the line sits next to your theme's price. The font is always the theme's.

Add a line under the theme price

Mode · Default: selected

The theme's price stays exactly as it is, and Pixoo's line (full price struck through, discounted price, badge) comes right after it. Nothing in your theme is hidden or modified, which is why this is the recommended mode: it cannot break a theme.

Replace the theme price

Mode

Hides the theme's price element and shows Pixoo's line in its place, so the shopper sees one price block instead of two. It depends on how your theme builds its price, so check a product page with and without a discount before keeping it. If the theme's price comes back on variant change, use the block instead.

Discounted price

Colour · Default: #c0392b

The colour of the discounted price in Pixoo's line.

Badge background

Colour · Default: #c0392b

The background of the savings badge and the code badge.

Badge text

Colour · Default: #ffffff

The text colour inside both badges.

Advanced

Two CSS selectors for themes that place prices in unusual containers. Leave them empty unless the automatic placement fails and the block is not an option. Empty means automatic.

Product page price CSS selector

Text · Default: empty

The element of the product page after which Pixoo's line is inserted, for example .product__info-container .price. Wrong selector: no line, never a broken page.

Collection card price CSS selector

Text · Default: empty

The same for the price inside each product card of a collection page, for example .card__information .price.

Preview, Save and Discard

On the right of the tab, and in the bar at the top.

Preview

Live

A sample product card that renders your texts and colours for the language selected in Texts, with an automatic discount and, when the code surface is on, a code badge. It is a sample, not one of your products: it shows the layout, not your real discounts.

Save / Discard

Bar at the top

The switches at the top, the texts, appearance and advanced fields are saved together with Save. Discard drops the unsaved changes. The per-discount switches in the list apply at once and do not need Save. After a save, the storefront can take up to ten minutes to reflect the change.

On the discount page: the Storefront card

Every product discount you open in Pixoo has a Storefront card in its form, right after the customer message, so you can decide per discount without leaving it.

Status

Badge

"Shown on product pages": visible right now. "Off for this discount": you switched it off here or in the list. "Surface off": the discount is on, but the surface switch in the Storefront tab is off. An excluded discount shows the reason instead.

Show the discounted price on product pages / Show this code on product pages

Switch

The same switch as in the list, for this discount. Price: on by default. Code: off by default. Applies at once.

The Storefront card in a product discount's form in Pixoo, with the status Shown on product pages and its switch
The Storefront card on a discount. The status says what a shopper sees right now, and why.

Reference

Which discounts qualify

The admin tells you for each discount. This table explains the rules behind it.

The discountWhat happens
Automatic discount, fixed amount or percentage, on products or collectionsShown. The line reads the discount the way the checkout will apply it, with the amount you set for the shopper’s currency.
Discount limited to specific marketsShown in those markets only. The page reads the market the shopper is browsing in.
Minimum quantity (for example 10% off from 3 items)Shown as a hint under the price, never as a discounted price: one unit does not qualify yet.
Cap on the number of discounted itemsShown, with a short mention of the cap next to the price.
Full-price items onlyShown only on variants without a compare-at price, exactly like the checkout.
Minimum purchase amountNot shown here. A product page cannot know the cart total. The cart progress bar covers this case.
Fixed amount spread once per orderNot shown. The price of one unit depends on what else is in the cart.
Limited to customer tags, segments, or B2B companiesNot shown. The storefront cannot verify who the shopper is, so the page does not guess.
Subscription purchases onlyNot shown. The product page prices the one-time purchase.
Collection built from variant conditions (for example all variants tagged "sale")Not shown. Shopify’s new collections can target single variants, and a page cannot replay their conditions. Use a collection of whole products, or select the variants by hand.
More than 1,000 targeted variantsNot shown. Use a collection instead of a product list.
Scheduled, expired, or ending in the next few minutesShown only while active. It is hidden a few minutes before the end date so a cached page never shows an expired price.

Under the hood

How it stays honest

Four mechanisms make sure the product page and the checkout always agree.

  • Same arithmetic as the checkout. The amount shown is the one you set for the shopper's currency. For a currency you did not set, with conversion enabled on the discount, Pixoo converts with the store's own rate and rounds the way the checkout does.
  • Doubt means silence. A discount whose outcome depends on something the page cannot see (the cart total, who the shopper is, a variant condition) is never shown. It is listed as excluded in the admin with the reason.
  • Checked at the first add to cart. When the shopper adds a product whose price was displayed, Pixoo reads the cart and compares the discount Shopify actually applied with the one displayed. They match to the cent, or the display hides itself for the rest of the session and Pixoo records the mismatch so we can look into it.
  • Best single discount, like Shopify. When several discounts cover a product, the page shows the largest saving for one unit, which is what the checkout picks. If two tie, the amount is shown and the discount name is left out, since the page cannot tell which one the checkout will name.

Help

Troubleshooting

Start with the diagnostic panel (add ?pixoo_debug=1 to a product URL). It answers most of these on its own.

Traps we hit while testing

We set up the feature on two themes and a dozen discounts before releasing it. These are the moments where we thought something was broken and it was not.

I switched currency and the price did not change
The discount had an amount for one currency only. A fixed-amount discount applies in the currencies you gave an amount for, plus the others only if you enabled conversion on the discount. In a currency where the discount does not apply, the page shows the theme price and nothing else, which is correct. Check the discount's currencies, or test in one you configured.
I created a discount and it is not in the list
Pixoo re-reads your discounts at most once every ten minutes, so a discount created a moment ago can be missing from the list until the next refresh. Reload the tab after ten minutes; it will be there, Shown or Excluded with its reason. Discounts edited in the Shopify admin (renamed, paused) are refreshed the same way.
I changed a setting and the store still shows the old one
The storefront keeps a copy of your settings for five minutes, and your browser may keep the page for a few more. Ten minutes is the worst case. A private window shows the new state sooner. While waiting, the diagnostic panel shows what the page currently has.
The code badge shows on some products and not others, with the same discount
On the products where an automatic discount already applies, there is no badge on purpose: Shopify keeps one product discount per item and would refuse the code there. We hit this with a code and an automatic discount on the same collection; the checkout refused the code, so the badge would have lied.
The line shows the amount but not the discount name
Two discounts give the same saving on that product. The amount is certain, the name the checkout will pick is not, so the page shows the amount only.
The discounted price is written differently from my theme prices
It should not be: the line uses your store's money format (decimal separator, currency symbol, position). If you spot a difference, send us the product URL.
On Horizon, the block was added at the bottom and I cannot move it
The theme editor adds an app block at the end of the template and does not let you drag it into a group such as Details. Delete it, open the Details group, click Add block, Apps, Pixoo product price, and it sits under the price. Once it is inside the group, you can drag it within it.
I activated the embed but I am previewing another theme
App embeds are per theme. The Open theme editor link activates the live theme; a draft theme you preview needs the embed toggled in its own editor. The status in Pixoo reads Active as soon as any theme with the embed has loaded a page.
A discount on a "small sizes" collection is excluded
Shopify collections can now contain single variants. A collection that selects variants by a condition (variant title contains "S", for example) cannot be replayed on a product page exactly, so the discount is excluded. A collection where you picked the variants by hand works: the page knows exactly which ones.
A "10% off from 3 items" discount shows no discounted price
One unit does not qualify, so the page shows the hint "10% off from 3 items" under the price and leaves the price alone. The discounted price appears in the cart once the quantity is reached.
A capped discount (for example 5 items max) shows on the product, and the cart total is different
The cart applies the cap; the product page prices one unit, which is within the cap, and adds the "max. 5 items" mention. A shopper buying more than the cap sees the difference in the cart, with the mention having said so.

When something does not show

Nothing shows on any product page
Check, in this order: the app embed status reads "Active" in Pixoo; the Show discounted prices switch is on and saved; the discount reads Shown in the list, not Off or Excluded; the product is actually covered by the discount, in the market and currency you are browsing in. Then wait ten minutes or open a private window. The diagnostic panel tells you which of these is missing.
It shows on some products but not others
The discount targets specific products, variants, or collections, and the page follows that exactly. A product with a compare-at price is skipped when the discount is set to full-price items only. A variant-condition collection is not supported (see above).
The line disappeared after I edited the discount
The storefront still had the previous version of the discount for a few minutes and the cart check found a difference, so the display hid itself for that browser session. Open a new tab, or wait ten minutes. Nothing was shown to shoppers that the checkout would not have given.
The line lands in the wrong place, or the panel says no price element was found
Add the Pixoo product price block under your price in the theme editor, as described in Placement above. If the block is not an option on your theme, use the selectors in Advanced, or send us the store URL.
A discount reads Excluded and I do not understand why
The reason is written under its name in the list. Most often the discount has a minimum purchase amount (the progress bar is the right surface for it), is spread once per order, or is limited to customer tags or segments. Editing the discount makes it qualify the next time the list is refreshed.
Collection cards show the line for some products only
On a collection page, Pixoo prices the first fifty products of the collection. Beyond that, and on the next pages of a paginated collection, the theme price is left untouched rather than replaced by a guess. The product page always shows the line.
A shopper copied a code and it was refused at checkout
Check whether an automatic discount also covers that product: Shopify keeps the automatic one and refuses the code. Pixoo hides the badge in that case, but a discount created or changed in the last ten minutes may not have reached the page yet. Also check the code's own limits: schedule, markets, usage limit, once per customer.

Still stuck? Email support@pixoo.app with your store domain and, if you have one, a screenshot of the diagnostic panel. We will look at it directly.

Related reading: setting up the cart progress bar and the complete guide to multi-currency discounts.