Skip to content

Product Page Pricing

When a discount applies to a product, Dino can advertise it on the product page itself — before the shopper adds it to their cart. The display is controlled by the Product page block in the Messaging section of the rule editor.

Depending on the discount type and the display mode you pick, customers see one of:

  • Tier table — for tiered or volume discounts, the table of quantity / spend tiers and what each one earns (a volume table also shows the price each and the saving, or for a fixed amount off, the amount off the set)
  • Promo message — a single line such as “Buy 2 Shirts — get free shipping”, either written by you or generated from the rule

Dino does not change the product’s displayed price or add a sale badge — the discount itself is applied in the cart.

The display updates whenever the rule changes — raise a tier from 10% to 15% and the tier table follows.

Whether a rule advertises on the product page — and in what words — is set per rule. Where the display lands is a single store-wide choice, so every product-page promo appears in the same place.

Per rule. Scroll to the Messaging section at the bottom of the rule editor. The Product page sub-block is a checkbox that expands:

  • Show on product page — the on/off switch. Unticked, this rule renders nothing on the product page.
  • Display mode — a segmented control with two options: Tier Table or Custom Message. It stays visible while the box is unticked, just greyed out — and picking a mode ticks the box for you.

When Display mode is Custom Message, a Custom message input appears for the message copy, with token chips above it (see Message tokens). Leave it blank and bundle (Buy X Get Y / Mix & Match) discounts get a generated message such as “Buy 2 Shirts — get free shipping”; for other discount types a blank custom message shows nothing.

Store-wide. The placement lives on the Message Settings tab, in the Product-page promo card — a single Position dropdown with two options:

  • Above Add to Cart — above the Add-to-Cart form. Works with standard WooCommerce templates and most page builders.
  • Below price — immediately after the price in the product summary. Needs a standard WooCommerce product template.

There is no product-tab placement: the display always renders in the product summary at one of the two positions above, never as a separate tab alongside Description and Reviews.

Rule editor scrolled to the Messaging section of a discount with no item condition: the Product page block shows its Set an item condition prompt, above the Spend-more nudge and Doesn't-qualify message blocks

The Product page block is gated — it only lights up when the rule is scoped to specific items (a category, tag, attribute or SKU in Which items qualify the rule? under What triggers it?, or on the reward’s item target). On a cart-wide rule with no item scope, the block collapses to a heading with the line “Product-page messaging applies when you scope this rule to a product, category, SKU, tag, or attribute.” and a Set an item condition link to the section that owns the gating field.

Inside the unlocked block, Tier Table mode has its own gate: it requires the rule to carry at least one tier with a threshold above zero. On a flat-discount rule, the Tier-Table tile is disabled (with a tooltip explaining why); Custom Message remains available, and unticking Show on product page always does.

This is the Messaging section’s locked-state pattern everywhere — gating fields stay in view, with a one-line explanation of what to change to unlock them.

Only tiered and volume discounts can render a tier table. Every other type shows a promo message:

Discount typeStorefront element
Tiered (% off / Spend & Save)Tier Table: spend or quantity tiers and the discount at each. Custom Message: your message
Volume (bulk pricing)Tier Table: every quantity threshold, the price each and the saving (a fixed amount off shows only the amount off the set). Custom Message: your message
Buy X Get Y / Mix & Match (bundle)A promo message — yours, or a generated one such as “Buy 2 Shirts — get free shipping”
Coupon-activatedNothing until the shopper’s cart carries one of the rule’s codes

The product page shows one promo, however many rules target the product. When two or more rules of the same shape (both tiered on spend, say) target the same product and all have Display mode set to Tier Table, the storefront merges them into a single table and, at every threshold, shows the best offer the shopper would actually get. Any other mix shows just one rule — the one with the best reward.

Two rules target the same product (call it “Widget”):

  • Rule 1 — “20% off at £50, 30% off at £100” (a tiered discount).
  • Rule 2 — “Free shipping at £50” (a flat free-shipping reward).

Without merging, the product page would render two separate tables and the shopper would have to mentally combine them. With merging, the Widget product page shows one table:

SpendWhat you get
£50Free shipping
£10030% off

The £50 row reads “Free shipping” because — at that threshold — free shipping is the headline benefit a shopper is told about. The £100 row reads “30% off” because at that threshold the tiered discount is the better offer. All three rewards (20% off, 30% off, free shipping) still apply at checkout — the merging is purely a display decision so the merchant’s product page is not crowded with overlapping tables.

For merchants tuning multi-rule setups, the comparator (StorefrontFilter::reward_beats()) picks the displayed row at each threshold in this order:

  1. Free shipping and free gift outrank value-bearing rewards (% off, fixed off, fixed price). They are flagged on the table because they are the merchant’s most visible upgrade.
  2. Within the same kind, the larger value wins — 30% off beats 20% off, £10 off beats £5 off.
  3. Cross-kind ties at the same threshold (e.g. 15% off vs £10 off neither uniquely better) — the first rule listed in the admin discounts table wins.

The merchant cares about #1 and #2; #3 is documented here for completeness but should rarely matter in practice — design the rule set so each threshold has one obvious “best” reward.

  • Not stacking. Stacking is a checkout-time decision controlled by the Stacking mode — the When discounts overlap dropdown in the Discounts tab toolbar. The merged table is a display choice; the engine still evaluates every rule independently when the cart is calculated.
  • Not deduplication. None of the contributing rules are dropped. Delete a “duplicate” rule and the next-best offer at each threshold slides into its slot — sometimes leaving an empty row.
  • Not best-in-the-cart. The merging is per-product on the product page. The cart still shows the per-rule discount lines under whatever Stacking mode you’ve configured.

You cannot split the merged table by moving one rule elsewhere on the page — Position is store-wide, so every product-page promo shares one slot. To keep a rule out of the merged table, untick Show on product page for that rule.

Do not reach for Custom Message to demote a rule instead. Merging requires every advertised rule on the product to be in Tier Table mode; a single rule set to Custom Message makes the whole group non-mergeable, and the product page falls back to rendering just one rule. Demoting rule C that way costs you rules A and B’s merged table too.

The storefront display also respects the shopper’s checkout currency. A rule scoped to a currency only advertises to shoppers paying in that currency, and a rule with a money amount but no currency is hidden rather than rendering a mismatched amount — there is no FX conversion. See Multi-currency compatibility for running a money deal in several currencies.

The display also honours the rule’s Where does it apply? zones. A rule scoped to “EU zone” only shows the discounted price on the product page when the shopper resolves to an EU country — shoppers outside the zone see no promo. The same zone check the cart uses decides this, so the product page and the cart don’t drift.

The display also honours the rule’s Who is this for? conditions. A rule for logged-in shoppers, first-time customers, a minimum order count or lifetime spend, time since their last order, or a customer role only shows on the product page to a shopper who meets them — everyone else sees no promo. The same audience checks the cart runs decide this, so the product page never advertises a discount to a shopper the cart would turn away for who they are or which code they hold. Cart conditions — a spend or quantity threshold, a usage limit — are not checked here: the promo is there to tell a shopper about a discount they have not qualified for yet. A coupon-activated rule follows the same idea: it shows only once the shopper’s cart carries one of its codes.

Dino hooks into WooCommerce’s standard product-page hooks (woocommerce_before_add_to_cart_form for Above Add to Cart, woocommerce_single_product_summary for Below price), so it works with most themes out of the box. Prices in the display use WooCommerce’s price formatting (currency symbol, decimal places, position).

If your theme uses non-standard price markup, the display may need CSS adjustments. The plugin uses clearly named CSS classes (.dd-*) for all output, making it straightforward to style.

The display settings are writable via the REST API for bulk imports, as the rule’s messaging.storefront object. It is either null (nothing renders on the product page) or { display_kind, message } — display_kind is badge (Tier Table) or banner (Custom Message). There is no per-rule position: a position key sent here is dropped on save, and placement comes from the store-wide setting described above. See the REST API reference.

WooCommerce is a trademark of Automattic, Inc. WordPress is a trademark of the WordPress Foundation. Dino Discounts is not affiliated with or endorsed by Automattic or the WordPress Foundation.

Contact · Report a bug