Discount Exclusion Manager: setup and help

Quick start

  1. Install the ZIP in Modules > Module Manager and open Sell > Discount Exclusions > Exclusion Groups.
  2. Add a group with Name and Active, then explicitly select Excluded products and review the preview.
  3. Set Vouchers and Catalog discounts independently; choose specific rules or All items deliberately.
  4. Save and resolve any unsupported-voucher or publication warning.
  5. Open Settings > Configuration and choose the cart message switches and translated text.
  6. Ensure the shared cron runner executes the registered Reconcile protected catalog prices task.
  7. Test a mixed protected/eligible cart, the protected-only cart, catalog prices, and a test order.

Requires PrestaShop 1.6.1 or later and PHP 7.1 or later.

Setup manual

Install and open Discount Exclusions

Upload the ZIP in Modules > Module Manager > Upload a module. Install it and click Configure. Open Sell > Discount Exclusions > Exclusion Groups to define protection. Use Settings > Configuration for cart messages and Settings > System Check for module checks.

Requires PrestaShop 1.6.1 or later and PHP 7.1 or later.

This revision uses exclusion groups and entity selectors. It does not provide the former Product IDs, Category IDs, Manufacturer IDs, or global Enable Module fields.

Installation and enablement attach the module to every shop. Disablement is also global because compiled cart-rule restrictions and native catalog-price relations can be shared. Select and review each group's shop associations deliberately.

Create an exclusion group

Open Exclusion Groups and add a group.

Field Initial state What to configure
Name Empty Required multilingual internal label, up to 255 characters.
Active Yes Enable the group. Set No to suspend that group's protection without deleting its definition.
Excluded products Selector has no saved policy yet Explicitly choose products or a live condition and review the matches before saving.
Vouchers New-group scope opens on All items Keep all vouchers or narrow the selector to the vouchers you want this group to affect.
Catalog discounts New-group scope opens on All items Keep all Catalog Price Rules or choose only the rules this group should block.

The product selector can select specific products or build live rules by category, brand, supplier, name pattern, price range, and the other available product methods. It can also express exceptions inside a selection. Review the selector's preview rather than treating it as a comma-separated ID field.

Vouchers and catalog discounts have independent scopes. Selecting no items in a restricted scope means none. It does not silently mean all. Existing selected-but-empty scopes remain empty when reopened. Explicitly select All items if you need every item.

Groups combine protection as a union. There is no priority field and no allow rule that overrides another active group's exclusion. A product protected by any applicable active group remains protected for that group's selected discount scope.

For example, to protect a product from one promotion, choose that product under Excluded products, choose that voucher under Vouchers, and leave Catalog discounts with no selected rules if catalog protection is not required. Save, then check the summary reads the intended voucher and catalog scopes.

To protect a category or brand, create a product selection using that condition. Review its live matches and any descendant-category option offered by the selector. Do not assume the old flat-ID behavior or automatic inclusion of every descendant.

Understand voucher protection

The module compiles supported exclusions into native cart-rule restrictions. PrestaShop 9.1 and later also provide runtime hooks for supported monetary shapes that cannot be represented safely by native restriction data.

The module does not require a CartRule override. Do not install an old override as a setup step.

Supported percentage rules can reduce only the eligible selection. A product protected from a voucher is removed from that voucher's monetary scope. Other manual specific prices or promotions can still apply to the product.

A voucher whose shape cannot be represented safely is disabled or rejected through the module's protection flow. Exclusion Groups can report that voucher protection is fail-closed, meaning the rule is prevented from applying until its shape or targeting is corrected and the policy is saved again.

Voucher case What to verify
Percentage on the cart or selected products Main native compilation path. Product conditions and special-price exclusions still need to be representable on your core.
Percentage on a specific product Can remain native when the target is eligible; a protected target is not allowed through.
Percentage on the cheapest product Requires the supported 9.1 runtime path and registered hooks. Older versions cannot use that protected shape.
Fixed amount on the whole cart Requires the supported 9.1 runtime path.
Fixed amount on selected or cheapest products Requires supported 9.1 product-level semantics, required targeting where applicable, and runtime hooks.
Fixed amount on one specific product Not supported for protected products.
Order-level reductions including shipping Not supported for protected products.
Combined runtime monetary reduction with free shipping or a gift Can be unsupported. Test the full rule instead of assuming each action is independent.

Pure non-monetary rules use the native-safe path unless another protection condition blocks them. For example, a protected gift product is explicitly unsupported. Free-shipping and gift combinations are subject to the same protection checks.

If no eligible monetary products remain, the rule must not discount protected items. Depending on its compiled state and core behavior, it can be unavailable or report that it does not apply to the basket. Verify both the displayed message and the actual discount amount.

Understand catalog discount protection

Catalog discounts targets Catalog Price Rules. The module removes the selected rules’ reductions from protected products.

Manual per-product specific prices, identified by a zero catalog rule ID, remain active. A protected item can therefore still have a manually configured discounted price. The base price remains unchanged. Other modules can still change prices.

The module records which prices it changed, so it can restore native behavior when protection is removed. Normal product, rule and selection changes are picked up straight away. Direct database changes and background catalog regeneration are picked up only by the scheduled maintenance task, so keep that task running.

After saving a policy, test a protected and an eligible product. Change a product so it enters or leaves a live selector, then confirm protection follows the new match after publication and reconciliation.

Configure cart messages

Open Settings > Configuration.

Setting Default What it does
Show Notice in Cart Yes Master switch for the module's cart messages and badges. Turning it off does not disable discount protection.
Savings Summary No Show what an applied code saved.
Savings Summary Text Empty Use translated default when empty, or enter a multilingual template.
Excluded Products Message Yes Explain excluded cart products.
Excluded Products Text Empty Use translated singular/plural default when empty.
Condition Explanation No Explain which product satisfied a voucher condition when that information is available.
Condition Explanation Text Empty Use the translated default or your own template.
Per-line Badge No Add a marker to excluded cart product rows when the theme supports it.
Per-line Badge Text Empty Use the translated default Excluded from discount, or your own wording.

Save changes. Empty text fields intentionally use the module's translations instead of saving the same English sentence in every language.

Available template tokens are:

Text setting Tokens
Savings Summary Text {code}, {voucher_name}, {discounted_amount}, {discounted_count}, {discounted_products}
Excluded Products Text {code}, {excluded_products}, {excluded_count}, {excluded_quantity}, {excluded_amount}
Condition Explanation Text {code}, {gate_products}
Per-line Badge Text Plain label text

If a required token has no data, a sentence using it can be suppressed. If your excluded-products sentence already contains {excluded_products}, the renderer avoids repeating the same product names in a separate list.

A rule reduced to nothing uses a separate translated basket message. Individual optional message switches do not replace that blocked-basket explanation; the master switch controls all module messages.

Schedule reconciliation

The module registers Reconcile protected catalog prices with a 60-second schedule in the shared MPR cron system. Ensure that a server scheduler actually invokes the shared runner. Registration alone does not install your server crontab.

For a standalone runner, obtain the exact command from the installed module's getCronCommand() method. An administrator with shell access can print it after substituting the real shop path:

php -r 'require "/path/to/shop/config/config.inc.php"; $module = Module::getInstanceByName("mprdiscountexclusionmanager"); echo $module->getCronCommand(), PHP_EOL;'

The method returns a once-per-minute command shaped like:

* * * * * php /path/to/shop/modules/mprdiscountexclusionmanager/cron.php --token=YOUR_SHARED_CRON_TOKEN --max-seconds=300

Install the generated command under an account that can read the shop configuration and run its PHP environment. The script accepts --token, --max-tasks, --max-seconds, --context, and --run-task. Token validation is required for CLI too.

An HTTP alternative uses the module-generated cron URL, normally /module/mprdiscountexclusionmanager/cron?token=.... The token belongs to the shared MPR cron configuration, not to a separate exclusion-group field. Keep it private. The runner can execute due tasks across modules. Use one suitable shared schedule if you already have one.

Verify the cart and theme integration

Create a cart containing one protected product and one eligible product. Apply a supported voucher. Compare the discount amount with the eligible merchandise, then remove the eligible product and check the result again.

Test percentage and fixed-amount rules separately on supported cores. Test the exact product conditions, gifts, shipping actions, currencies, tax display, and partial-use options you use. Check an actual test order as well as the cart.

With cart notices enabled, the module renders through displayShoppingCart and displayShoppingCartFooter. JavaScript refreshes impact data after cart updates and tries to place messages near the voucher area. It also adds optional badges when it recognizes the theme's product rows.

The current template consumes mprdexclusion_impact. It renders theme-style article alerts using .mprdexclusion-cart-notice and state data. The former mprdexclusion_notice_text and mprdexclusion_excluded_names example is not the current template interface.

A theme override can be placed at:

/themes/your_theme/modules/mprdiscountexclusionmanager/views/templates/hook/cart-notice.tpl

Inspect the current template before customizing. The cart alert uses the theme's alert styling. Current useful selectors include .mprdexclusion-cart-notice and .mprdexclusion-line-badge. Do not rely on the old notice-text and excluded-list wrapper classes.

Troubleshoot and uninstall

If a product is still discounted, check the group's active state, product preview, shop associations, and the separate voucher or catalog scope. Determine whether the discount comes from a manual specific price, which catalog protection deliberately leaves active.

If a voucher disappears, inspect the warning on Exclusion Groups. Review its reported unsupported shape, change the voucher or scope, and save the exclusion policy again. Do not reactivate a quarantined native voucher directly without resolving the policy.

If selection publication or reconciliation fails, inspect Settings > System Check, module diagnostics, and cron results. A stale or incomplete protection state can stop pricing or voucher application instead of allowing an unprotected discount.

If cart messages are absent, check the master and individual switches, hook placement, front JavaScript, and theme selectors. Financial protection and message display are separate paths.

To suspend one policy, set its Active switch to No and save. To stop the module, use Module Manager. Enable and disable operations apply globally in multishop. Disable restores native catalog behavior and reconciles voucher state while retaining definitions.

Before uninstalling, back up policies and review affected native rules. Uninstall checks that voucher restoration is possible, restores managed voucher and catalog state, unregisters cron tasks, and removes module configuration and tables. If restoring the protected discounts fails, uninstall stops. Resolve the reported failure before retrying; do not delete module tables or files manually.

Questions

2

Does Discount Exclusion Manager store cart-related records?

Yes. Its storage includes exclusion groups, voucher protection state and catalogue-price restoration records. Cart hold records contain a cart ID, voucher ID, shop ID and creation date.

How is a fixed-amount voucher calculated in a mixed cart?

On the supported PrestaShop 9.1+ whole-cart fixed-amount path, the voucher's converted face value is capped at the eligible products' total and distributed only among those products. It is not reduced by their share of the entire cart. This path requires a sole voucher and one package containing all eligible products; unsupported cases are blocked.

Known Issues

12

Product saves failed after exclusion-related category changes

ResolvedUpdated:
Fixed in: 2.2.4
Moving a product into an excluded category could abort the product save while its discount protection was refreshed.

Incorrect exclusion counts and voucher readiness

ResolvedUpdated:
Fixed in: 2.2.4
Active live exclusions could be reported as selecting nothing, while correctly disabled vouchers could remain stuck in a failed readiness state.

Administration labels remained in English

ResolvedUpdated:
Fixed in: 2.1.13
Some settings labels did not use the available translations.

Exclusion group pickers could not find entities

ResolvedUpdated:
Fixed in: 2.1.10
Entity types shown by the group pickers were not consistently available when searching, so intended selections could fail.

Damaged translated labels

ResolvedUpdated:
Fixed in: 2.1.10
Translated administration text could display repeated backslashes or incorrectly escaped characters.

Scheduled task entry point missing from releases

ResolvedUpdated:
Fixed in: 2.1.10
A distributed release could omit the entry point needed to run scheduled tasks.

Displayed exclusions did not change the amount charged

ResolvedUpdated:
Fixed in: 2.0.3
On PrestaShop 1.7.4 and later, exclusions could change the displayed voucher amount without changing the actual amount charged.

Exclusion group edit page failed

ResolvedUpdated:
Fixed in: 2.0.3
Opening an exclusion group for editing could stop the page because its product picker could not initialize.

Every-voucher group saved the wrong scope

ResolvedUpdated:
Fixed in: 2.0.3
Saving a group that should apply to every voucher could store a different voucher selection.

Deleting the last active voucher failed

ResolvedUpdated:
Fixed in: 2.0.3
Removing the last active voucher could fail during the module's voucher update handling.

Previously blocked vouchers were not restored to carts

ResolvedUpdated:
Fixed in: 2.0.3
When an exclusion policy changed, a voucher that became valid again could remain missing from carts that previously held it.

Cart exclusion notice appeared away from totals

ResolvedUpdated:
Fixed in: 1.0.6
The discount exclusion notice was not positioned near the cart totals where shoppers review their discount.

Feature Requests

6

Implemented

Discount exclusion rules

Implemented
Choose products that should be excluded from discounts and inform shoppers when exclusions apply.

Installation checks and repair

Implemented
Check installation requirements and repair missing module infrastructure from the back office.

One-click module updates

Implemented
Check for and install module updates from the back office.

Targeted exclusion groups

Implemented
Create groups that target selected products and vouchers with separate exclusion modes.

Catalog price rule protection

Implemented
Protect selected products from catalog price rules and vouchers while preserving merchant-defined prices.

Custom multilingual cart notices

Implemented
Customize cart exclusion notices per language using details such as excluded products, savings and per-product badges.

Changelog

v2.0.32026-04-26

  • Exclusion groups now protect products from catalog price rules and from vouchers, with no PrestaShop core overrides
  • Vouchers keep their product conditions; the discount applies to the non-protected items only, on displayed and charged prices
  • Configurable cart messages per language with tags: excluded products, savings, condition, per-line badge
  • Applied vouchers survive exclusion changes; deleting the last voucher is safe; PrestaShop 1.6 to 9.x
Older releases

v1.2.02026-04-20

  • AddedLicense management tab with key management and renewal options
  • Addedself-healing integrity checks for automatic diagnostics and repair
  • Addedcomplete FR/DE/ES/IT/PL translations

v1.1.02026-01-29

  • AddedPrestaShop 9 and Hummingbird theme compatibility
  • Fixedexclusion not applied when cart rule uses a gift product condition in PS 9 cart service
  • Addedbulk exclusion import via CSV for managing large product catalogs efficiently
  • Improvedback-office exclusion list showing active promotions per product for context

v1.0.72025-12-24

  • Addedcomplete FR/DE/ES/IT/PL translations
  • FixedMove discount exclusion notice near cart totals

v1.0.02025-10-22

  • Initialrelease of Discount Exclusion Manager
  • InitialExclude specific products from all active promotions and voucher discounts
  • InitialExclusion applies to cart rules, catalog price rules, and quantity discount tiers
  • InitialBack-office management list with search and category filter for scale
  • InitialPer-product toggle accessible directly from the product edit page for quick access

Demo

Test the full module before you buy

Buy a licence later and keep your settings.

  • Your 30-day demo Test it on your own shop for 30 days from the first install.
  • Ready demo shop Explore a ready demo shop in your browser.
  • No registration No account, email or store domain needed.
Launch demo shop

By downloading, you accept the demo terms and privacy policy.

By opening this demo you accept the demo terms and the privacy policy.

Loading...
Back to top