PrestaShop offers two discount mechanisms that look alike and do not do the same thing. Confusing them produces promotions that don’t display, discounts that stack when they shouldn’t, or the opposite.
What each mechanism does
The specific price acts on the product. It changes the price displayed in the catalogue, on the product page, in listings and in feeds. The customer directly sees the new price, usually with the old price struck through.
It applies according to conditions: period, customer group, shop, currency, country, minimum quantity, and possibly a precise combination.
The cart rule acts on the order. It applies at cart time, it bears on an amount or a percentage of the total, and it can be conditioned on a minimum amount, a code, a carrier.
The catalogue knows nothing about it: displayed prices remain the normal prices, and the discount appears as a separate line in the cart.
The difference that decides
A single question settles it in almost every case: must the reduced price be visible before the cart?
If yes, specific price. That is the case for any promotion you want to appear on product pages, in listings, in your feeds to comparison sites, and on which you want a badge.
If no, cart rule. That is the case for promo codes, discounts conditioned on an order amount, and anything that depends on the cart’s composition.
An important corollary: a cart rule never appears in your product feeds. If you feed a comparison site or an advertising platform, your promotional price must be a specific price, otherwise it will not be passed on.
The order of application
A technical point that explains most calculation surprises.
The sequence is as follows. The product’s base price, possibly modified by combination impacts. Then the specific price, if one applies. Then the cart rules, on the total thus obtained.
Consequence: a 20% cart-rule discount on a product already on a specific price applies to the already reduced price, not to the initial price. The combined reduction is therefore below 40%.
Second, less obvious consequence: if several specific prices could apply to the same product, PrestaShop keeps the most specific one, meaning the one whose conditions are the most precise. They do not stack with each other.
The specificity hierarchy follows the criteria: a price defined for a precise combination and a customer group beats a price defined for the whole catalogue.
PrestaShop 8 & 9 Quantity Discount Module — Buy X Get Y Free & Promo BadgesFive quantity promotion mechanics, each with the badge that sells it on the product thumbnail.€79.00
Stacking cart rules
Unlike specific prices, cart rules can stack, and that is what produces the nasty surprises.
Two settings control this behaviour. The priority, which determines the order of application. And the compatibility with other rules flag, which lets you exclude stacking.
Three precautions.
Check stacking before publishing. Create a test cart with all your active rules and look at the total. A 10% welcome discount stacked with a 15% loyalty discount and a 20% seasonal operation can end in selling at a loss.
Set a total discount ceiling where possible, or mark your rules as mutually incompatible.
Watch out for automatic rules without a code. They apply silently and nobody notices until the margin analysis.
The case of quantity promotions
This is where both mechanisms show their limits, and it is the most frequent situation in practice.
The specific price handles a minimum quantity: from three items, the unit price drops to a given amount. That works well for tiered pricing.
It does not handle buy X get Y free. Buy three get one free is neither a tiered price nor a discount on the total: it is a rule that bears on a quantity and must apply per batch.
The cart rule doesn’t handle it either: it reasons on the amount, not on the units.
The common workarounds are unsatisfying. A tiered price from four items gives a close result but the display does not say “one free”. A cart rule offering a product does not repeat per batch of four.
It is the typical case where neither of the two native mechanisms does the job.
Catalogue display
Four points to watch.
The struck-through price only appears with a specific price, and provided the reduction is expressed in a way that lets the reference price be computed.
Promotion badges in listings follow the same logic: they are triggered by the presence of a specific price.
Sorting by price takes specific prices into account, not cart rules. A product heavily discounted by cart rule appears in the sort at its normal price.
Price range filters likewise. A customer filtering under 50 euros will not see a 60-euro product discounted to 45 by a cart rule.
These last two points explain why promotions meant to be discovered must go through the specific price.
Display compliance
A reminder with consequences on the choice of mechanism.
Under the EU price-reduction rules, a discount announcement must indicate the lowest prior price applied over the last thirty days. This obligation attaches to the discount announcement, so mainly to specific prices and their struck-through display.
Two practical consequences. Your struck-through price must match that reference price, not a recommended price or a rate never actually applied. And the price history must be kept in order to justify it.
A discount applied in the cart via a promo code follows a different logic, but caution remains in order as soon as a percentage is announced publicly.
The decision table
Six situations and their answer.
Sale on a range: specific price, with period and struck-through price.
Promo code by email: cart rule with code.
Permanent discount for professionals: specific price per customer group.
Free shipping above an amount: cart rule.
Tiered pricing by quantity: specific price with minimum quantity.
Buy X get Y free: neither, natively.
Check before publishing
Four checks on a test cart.
The price displayed on the product page matches what you expect.
The price in the listing is identical to the product page’s.
The cart total after applying all rules stays above your margin threshold.
The product feed, if there is one, does pass the promotional price on.
The Quantity Deals module for PrestaShop handles the case that neither the specific price nor the cart rule covers on PrestaShop 8 and 9: buy X get Y free offers applied per batch, explicit display of the offer on the product page and in the cart, badges in listings and controlled compatibility with other discounts.