Product Label
v1.2.0
Product Label
- Updates and support included for 12 months
- License key delivered immediately by email
- 30-day money-back guarantee
- Full documentation included
- Compatible with Hyvä themes
- Composer-ready installation
Product Labels
Sale badges, new-arrival flashes and low-stock warnings are the cheapest conversion levers in a catalogue, and the ones most often bolted on with a third-party script that slows the page down. This module puts them back where they belong: rendered by Magento itself, over the product image, on every surface where a product appears.
Nothing is drawn in the browser. Labels are computed against a dedicated index and printed into the HTML, so they survive the Full Page Cache, cost no layout shift, and are visible to search engines. A category page carries its labels for one extra database query, whatever the number of products on it.
Who it's for
- Merchants running promotions who want the discount visible in the listing, not only on
- B2B catalogues where quantity discounts and stock levels drive the buying decision
- Teams who care about Core Web Vitals and refuse to add another render-blocking script
the product page
Key benefits
- Fourteen shapes, no image files — corner ribbons, banners, starbursts, hexagons,
- Colours picked, not coded — background, text and accent colours come from the
- Dynamic values that stay honest — show the live discount percentage, the amount
- Targeting you already know — the same condition builder as catalog price rules,
- Every surface, one setup — category listings, search results, widgets, related and
- Fluid on every screen — badge sizes are relative to the product image rather than
- Cache-safe by design — rendering varies by store view and customer group through
- Accessible and inclusive — a hidden readable sentence accompanies each badge so
price tags and more, all generated as vector graphics. Crisp on any screen, recoloured from the back-office, and not a single extra HTTP request.
native Magento colour picker. The text colour is derived from the background's luminance using the WCAG formula, so a pale badge never ships unreadable white text.
saved, the tier price and its quantity threshold, days left on a promotion, or any product attribute. Percentages round down by default, because a badge promising 30% on a 29.6% discount is a claim you cannot defend.
plus ready-made shortcuts for on sale, new, out of stock, low stock and quantity discounts. Presets fill that builder rather than hiding a second, simpler engine behind it.
cross-sell blocks, the comparison list, the wishlist, the cart page, the mini-cart and the product page. Configure once, then override only where a context should differ.
to the viewport, so the same label is correctly proportioned in a two-column mobile grid and on a full-width product image, with no breakpoints to maintain.
the same context Magento already folds into its cache key, so group-specific labels cannot leak between visitors. Saving a label invalidates the affected pages.
"-30%" is announced in words, positions use logical properties so right-to-left store views work without extra configuration, and reduced-motion preferences are respected.
Compatibility
- Magento 2.4.x / Mage-OS 2.x and 3.x equivalents
- PHP 8.1, 8.2, 8.3, 8.4, 8.5
- Requires
wimakeit/module-core3.0.9 or later - Works on Luma and Breeze out of the box;
wimakeit/module-product-label-hyvaadds the - Multi Source Inventory is optional: salable quantity uses it when installed, and falls
- Bundled i18n: English, French, Dutch
Hyvä product page gallery anchor and Tailwind sources
back to the legacy stock registry otherwise
Install this module via Composer. Make sure your auth.json is configured with your Wimakeit credentials.
$ composer require wimakeit/module-product-label:^1.2.0
$ bin/magento setup:upgrade
$ bin/magento setup:di:compile
Installation notes
The standard composer require + setup:upgrade + setup:di:compile flow applies. The points below cover what's specific to this module.
Required dependency
This module requires wimakeit/module-core 3.0.9 or later. Composer will pull it automatically from the Wimakeit registry as long as the registry is declared in your project's composer.json.
Multi Source Inventory is optional. When magento/module-inventory-sales-api is present, the salable quantity condition and the {{qty}} value account for reservations; without it they fall back to the legacy stock registry. Nothing needs to be configured either way.
First reindex
Labels only appear once the index has been built. After enabling the module, run:
bin/magento indexer:reindex wimakeit_product_label_rule
Two indexers share one index table, mirroring how Magento splits catalog price rules:
| Indexer | Reacts to |
|---|---|
wimakeit_product_label_rule | a label being created, edited or deleted |
wimakeit_product_label_product | product, price, stock and category changes |
Both are safe in Update by Schedule, which is the recommended mode on large catalogues.
ACL permissions
After installation, four ACL resources are registered under System → Permissions → User Roles:
| Resource | Default |
|---|---|
Wimakeit_ProductLabel::label (view the label grid) | granted to Administrator role only |
Wimakeit_ProductLabel::label_save (create and edit labels) | granted to Administrator role only |
Wimakeit_ProductLabel::label_delete (delete labels) | granted to Administrator role only |
Wimakeit_ProductLabel::config (edit module configuration) | granted to Administrator role only |
The conditions builder is served by this module's own controller, so managing labels does not require catalog price rule permissions.
Configuration
The module ships with safe production defaults. Go to Stores → Configuration → WiMakeIT → Product Labels only if you want to change them.
General settings
| Setting | Default |
|---|---|
| Enable Product Labels | Yes |
| When several labels share a position | Stacked side by side (alt: only the highest priority) |
| Enable Debug Logging | No — leave off in production |
Display
| Setting | Default |
|---|---|
| Show labels on | all contexts (listing, search, product page, gallery, related, cart, mini-cart, wishlist, comparison, widgets) |
| Maximum labels per position | 2 |
| Write label colours as inline styles | No — colours are emitted once per page in a single nonce-carrying <style> block, which is smaller and survives an enforced style-src policy |
Dynamic values
| Setting | Default |
|---|---|
| Discount percentage rounding | Round down — a badge promising 30% on a 29.6% discount is not defensible |
| Discount percentage decimals | 0 |
Indexing
| Setting | Default |
|---|---|
| Reindex on save up to this many products | 20000 — above this, saving a label marks the index invalid instead of rebuilding synchronously, so the admin save never hangs |
| Refresh date-driven labels by cron | Yes |
Performance
| Setting | Default |
|---|---|
| Preload labels for up to this many products per page | 500 |
| Cache rendered label markup | No — the Full Page Cache already covers this; enable only on very large catalogues that make heavy use of product attributes in label text |
| Rendered markup cache lifetime (seconds) | 86400 |
Accessibility
| Setting | Default |
|---|---|
| Announce labels to screen readers | Yes |
Cron jobs (registered automatically)
| Job | Schedule |
|---|---|
wimakeit_product_label_refresh_dated | 5 |
This job re-indexes products whose special price or new-product date window opened or closed, and cleans the page cache for those products. It runs hourly rather than daily so store views in different timezones each get their date boundary handled on the hour it actually occurs for them. This mirrors what Magento itself does for catalog price rules.
Hyvä storefronts
Labels already render on Hyvä without any extra module: the listing, search, widgets, related blocks, comparison, wishlist and the cart page all go through the standard Magento image block.
Install wimakeit/module-product-label-hyva to add the two surfaces Hyvä builds differently — the product page gallery and the Alpine mini-cart drawer — and to expose the wm-* classes to your theme's Tailwind build:
composer require wimakeit/module-product-label-hyva
bin/magento module:enable Wimakeit_ProductLabelHyva
bin/magento setup:upgrade
bin/magento hyva:config:generate
cd app/design/frontend/<Vendor>/<theme>/web/tailwind && npm run build
Command line
bin/magento wimakeit:product-label:reindex # rebuild everything
bin/magento wimakeit:product-label:reindex --label=on_sale # one label, by code or id
bin/magento wimakeit:product-label:reindex --product=42,43 # specific products
bin/magento wimakeit:product-label:list # labels and their match counts
wimakeit:product-label:list shows how many products each label currently matches, which is the fastest way to confirm a conditions tree does what was intended without opening the storefront.
Cache types
The module registers a Product Labels cache type, holding the label definitions per store view. It is invalidated automatically whenever a label is saved or deleted.
- Version
- v1.2.0
- Support
- 12 months
- Last updated
- Aug 18, 2026
- Magento
- Magento 2.4.4 Magento 2.4.5 Magento 2.4.6 Magento 2.4.7 Mage-OS 2.0 Mage-OS 2.1
- PHP
- PHP 8.1 PHP 8.2 PHP 8.3
- Hyvä
- Compatible
- Package
-
wimakeit/module-product-label
Compatibility checker
Pick your stack to see if this module fits.
Changelog
Categories: Security, Feature, Fix, Perf, Admin, Deps.
[1.2.0] - 2026-08-18
Feature
- Cibler des produits par référence. Une condition SKU s'ajoute aux règles, avec le sélecteur de produits de Magento : recherche, tri, cases à cocher. Plusieurs références se choisissent d'un coup.
- Aperçu en direct. Le pavé Apparence affiche une carte produit d'exemple qui se met à jour à chaque réglage — forme, position, taille, couleurs — et reste visible pendant qu'on fait défiler.
- Cinq étiquettes d'exemple livrées prêtes à l'emploi, désactivées, pour partir d'une base plutôt que d'une page blanche.
Admin
- Rotation, opacité, arrondi et décalages se choisissent dans des listes plutôt que se saisir au clavier.
- Les étiquettes ne collent plus au bord de l'image, sauf les rubans de coin pour lesquels c'est voulu.
Fix
- L'écran d'édition d'une étiquette pouvait ne plus s'ouvrir du tout sur Magento 2.4.9 / Mage-OS 3.1.0.
- Une étiquette posée sur une vignette de listing pouvait faire disparaître la photo du produit.
- Les tailles xs à xl ne se distinguaient presque pas sur les formes pilule et texte seul.
- Les listes Vues de magasin et Groupes de clients n'affichaient aucune option.
[1.1.0] - 2026-08-17
Fix
- Les tables de l'extension n'étaient pas créées à l'installation, rendant l'écran des étiquettes inutilisable.
[1.0.0] - 2026-08-17
Feature
- Product labels and badges rendered over product images across every surface: category listings, search, widgets, related and cross-sell blocks, comparison, wishlist, cart, mini-cart and the product page.
- Fourteen parametric vector shapes — corner ribbons, banners, starbursts, hexagons, price tags, bookmarks and more — recoloured from the back-office with no image files and no extra HTTP request.
- Dynamic values in label text: discount percentage and amount, prices, tier price and its quantity threshold, salable quantity, days left on a promotion, and any product attribute. Percentages round down by default so a badge never over-promises.
- Targeting through the native Magento condition builder, extended with shortcuts for on sale, new, out of stock, low stock, tier price and final price, plus six presets that fill the builder rather than hiding a second engine behind it.
- Per-context overrides, so a label can be smaller in the mini-cart or hidden in the cart without duplicating its configuration.
Perf
- Server-side rendering with a dedicated product-to-label index: no JavaScript, no layout shift, and labels remain visible to search engines.
- A category page resolves the labels for all its products in a single database query, whatever the number of products displayed.
- Rendering varies by store view and customer group through the context Magento already uses for its page cache key, so group-specific labels cannot leak between visitors.
Admin
- Label grid with live badge previews and the number of products each label currently matches, plus duplicate, mass enable, disable and delete.
- Live preview in the edit form driven by the same renderer as the storefront, so what is approved is exactly what ships.
- Colours chosen from the native Magento colour picker, with the text colour derived automatically from the background luminance for readable contrast.
wimakeit:product-label:reindexandwimakeit:product-label:listcommand line tools, and an admin REST API for cross-environment provisioning.
Security
- No free-form CSS anywhere: colours and dimensions pass through a closed, validated set of CSS custom properties, emitted in a single nonce-carrying style block that survives an enforced Content-Security-Policy.
- Label text is escaped segment by segment, so neither a merchant-entered string nor a resolved product value can inject markup.
Found a bug? Tell us about it.
A short form opens in a new tab — the module name and your language are already filled in. Share what you tried, what went wrong, and we will get back to you within one business day.
Report a bug for Product LabelNeed help?
Our team is available to assist with integration.