Customer groups and price rules
How B2B Suite decides what a customer pays — rule scopes, quantity bands, precedence and the interaction with sale prices and coupons.
Every price on your storefront is decided by one resolver. Nothing else in the plugin is allowed to change a price, which is why the shop, the cart and the block checkout can never disagree.
Rule anatomy
A price rule has:
| Part | Options |
|---|---|
| Group | The customer group the rule applies to |
| Scope | Whole shop, or a product (free) · category, tag, or a single customer (Pro) |
| Type | Percentage off, amount off, or fixed price |
| Quantity band | Optional minimum and maximum quantity |
| Priority | Breaks ties inside a level |
Precedence
Resolution walks seven levels and stops at the first match:
- An accepted quote (Pro)
- A customer-specific rule (Pro)
- A company rule (Pro)
- A group rule
- A category or tag rule (Pro)
- The WooCommerce sale price
- The regular price
Within a level, the higher priority wins. If priority ties, the larger discount wins. Rules are read fresh on every resolution, so a product added to a category tomorrow is covered by today’s category rule.
Quantity bands
Give a rule a minimum and maximum quantity to create tiers:
- 1–9 → 10% off
- 10–49 → 18% off
- 50+ → 25% off
Bands are evaluated against the quantity being priced, and the cart re-resolves as the quantity changes. Pro adds a tier table on the product page so buyers can see the ladder.
Sale prices
If a B2B rule matches, it wins — even when the WooCommerce sale price happens to be lower. This is deliberate: precedence is absolute, so a temporary retail sale never silently overrides a contract price. The Price Explainer records the sale price it beat, which is the answer to “why isn’t my sale price showing for wholesale customers?”.
Coupons
Coupons are applied by WooCommerce after B2B resolution and never re-enter the pricing walk. A 10% coupon takes 10% of the resolved trade subtotal — discounts cannot compound by accident. You can also restrict coupons per group.
Performance
Rules live in the plugin’s own indexed tables, not in postmeta, and are loaded in bulk once per request. A 300-variation product resolves in a handful of queries cold and none at all warm.
Related
- Quantity rules — minimums, maximums and pack sizes, which are separate from pricing
- REST API — resolve a price for any customer from outside WordPress
Was this page missing something?
Documentation gaps are treated as bugs here. Tell us →