
Sale & Stock Badges puts badges on your WooCommerce products. Some appear on their own from each
product’s current state (Sale, New, Low stock, Bestseller, and a few
others), and you can also set one manual badge per product using a store-wide label
and colour.
The badges are drawn with CSS and sit over the product image, so they add no
JavaScript and don’t shift the layout when the page loads. They show on the single
product page and on shop, category and tag listings.
The code is open and lives on GitHub if you want to read
it, file a bug or send a patch.
Configuration lives under a top-level Sale & Stock Badges admin menu: a global on/off
toggle, placement controls, per-rule toggles with custom labels, thresholds, an
appearance section (shape, uppercase, per-context caps) and the manual badge
label and colour. Settings are sanitised and clamped on save.
Documentation and links
- Documentation – plogins.com/plogins-sale-stock-badges/docs
- Plugin page – plogins.com/plogins-sale-stock-badges
- Source code – github.com/wppoland/plogins-sale-stock-badges
- Bug reports and feature requests – GitHub issues
- Marks Pro – plogins.com/plogins-sale-stock-badges-pro/
Features
- Automatic badges: Sale, New, Low stock, Bestseller, Discount percent, Free shipping, Out of stock.
- Custom label text for every automatic badge.
- Configurable thresholds: newness window, low-stock level, bestseller sales.
- Free-shipping detection by product shipping class.
- Placement controls: single product page and/or shop and category listings, including Product Collection blocks and the [products] shortcode on any page.
- Appearance controls: pill or square shape, top left or top right corner (mirrored in right-to-left languages), uppercase, and a per-context badge cap.
- Brand colour for Accent badges (Bestseller and an Accent manual badge), with the label text switching between white and dark to stay readable.
[marks_badges]shortcode to place badges anywhere.- A single manual badge (label + colour) shown per product via meta.
- CSS-only rendering: no JavaScript, no layout shift.
- Global on/off toggle and per-rule toggles.
- Translation ready (POT included) and clean uninstall.
- HPOS and cart/checkout blocks compatible.
The [marks_badges] shortcode
Use [marks_badges] to drop a product’s badges into any page, post or widget. With
no attributes it uses the current product (inside a loop or on a single product
page). Pass id to target a specific product and context (single or loop) to
pick the render style:
[marks_badges id="123" context="loop"]
Reporting a security issue: email hello@wppoland.com, and under our coordinated disclosure policy we confirm within two business days, assess within five, and patch a critical issue within seven days of confirming it.
Marks Pro
Marks Pro is a separate paid plugin that extends Marks.
Included in Marks:
- Automatic badges
- Low-stock threshold
- Manual badge
- CSS-only, no JavaScript
- Listing and product page
Marks Pro adds:
- Scheduled campaign badges
- Conditional rules
- Image badges
- A/B label sets
The free edition is not a trial and its features stay available without a time limit.
- Marks Pro – plogins.com/plogins-sale-stock-badges-pro/
- Compare editions and pricing – plogins.com/plogins-sale-stock-badges-pro/pricing/
- PRO documentation – plogins.com/plogins-sale-stock-badges-pro/docs/
External Services
Sale & Stock Badges does not connect to any external services. Badges are computed and drawn entirely on your own server from WooCommerce data already in your database (price, stock, sales, product dates and shipping class), and the badge CSS is served from the plugin’s own assets.
The plugin stores its configuration in two WordPress options (marks_settings and marks_db_version) and reads per-product post meta (_marks_manual_text and _marks_manual_style) for the manual badge. No visitor or store data is sent anywhere, and the plugin does not call home, load remote scripts or fonts, or send email.
Translations
Sale & Stock Badges is fully translatable and ships the plogins-sale-stock-badges.pot template. Translations are delivered by WordPress.org language packs from translate.wordpress.org, which is where Polish, German and Spanish are being contributed; the package itself carries no compiled translation files.
Screenshots

Automatic badges on a shop listing.

The Sale & Stock Badges settings screen.

Badge labels filled from the {stock} and {discount_percent} tokens: "Only 3 left" and "-25%" in the shop loop.

Sale and Bestseller badges on a single product page photo.