A sale badge can be correct for the parent product and wrong for the variation a shopper selects. In WooCommerce 11.3 beta testing, check the badge alongside the selected price and add-to-cart options. A maximum saving is not a promise that every size, color or configuration has that discount.
This guide concerns the beta available on October 28, 2026. Rehearse on an isolated store, not a live promotion. It is a display test, not advice to change merchandise prices.
Build a price fixture that catches the easy mistake
Use three artificial variations in the same currency. Give A a regular price of 80 and sale price of 60. Give B a regular price of 120 and sale price of 96. Leave C at 90 with no sale price. A has the highest percentage saving, 25%, while B saves the largest amount, 24.
Record tax-display settings and currency before comparing screenshots. Do not calculate a percentage from one tax basis while judging a price displayed on another. Also check that the sale is active at the time of the test, rather than scheduled for tomorrow.
| Variation |
Regular |
Sale |
Saving |
Percentage |
| A |
80 |
60 |
20 |
25% |
| B |
120 |
96 |
24 |
20% |
| C |
90 |
None |
0 |
0% |
The calculations are examples, not store measurements. Keep these values separate from the product database on production.
Exercise the interactive badge
The selected-variation implementation describes the interactive path using the On-Sale Badge and Add to Cart + Options blocks. It distinguishes the unselected parent summary from a selected variation and from noninteractive product cards.
- Open the staged product with no default attributes. Record the initial percentage badge.
- Select every required attribute for B. Compare the resulting badge with B's price, not A's larger percentage.
- Select C. Confirm that no active sale claim remains for that selection.
- Clear an attribute. Check the return to the unselected state.
- Repeat with amount savings and your actual prefix and suffix.
- Set B as the default variation and reload in a new session. Repeat with C as default.
Synthetic prices show why the largest currency saving and highest percentage can belong to different variations.
Separate template, price and JavaScript faults
If the selected price changes but the badge does not, inspect the block arrangement and browser console. Compare with an unmodified copy of the template. A theme's custom sale label is not necessarily the core On-Sale Badge block, even if both say Sale.
If neither price nor badge changes, first resolve variation selection. Confirm the attributes identify an available variation. Avoid adding a custom badge script to compensate for a broken variation selector.
If the wrong products appear in the collection at all, use the on_sale/include/exclude diagnostic. Membership and presentation are different failures and should not be repaired with the same workaround.
The implementation also notes a server/client distinction for custom badge text filters. Test your actual extension output after a selection change; do not assume a server-rendered text customization is reapplied by every client-side update.
Approve the promotion with evidence
Keep a short record containing the build, template, selected attributes, regular price, sale price, badge mode and displayed label. Include one screenshot for each transition, not only an attractive initial page. Check mobile wrapping with the longest prefix and suffix you intend to use.
Only approve when the label agrees with the selected product and the no-sale case makes no discount claim. A visual mismatch does not justify deleting variations or resetting all prices. For a custom-template conflict, request a focused WooCommerce fix with the fixture and transition that fails.
Sources checked October 28, 2026. Synthetic fixtures and diagrams illustrate the proposed checks; they are not claims of customer testing.