Dynamic Pricing Recipe

Wholesale Pricing by Role

One catalogue, two prices. No second store, no coupon code, nothing for the customer to type.

Read this first: the price follows the role

A wholesale price in Dynamic Pricing is a rule attached to a WordPress user role. Anyone in that role sees the discounted price the moment they log in — on the shop, on the product page and in the cart. Everyone else sees list price and never knows the rule exists.

That means there is no separate price field to maintain per product, and no code for the customer to remember. It also means the role is the thing you have to get right: whatever puts customers into it — manual assignment, a registration form, a membership plugin — is outside Dynamic Pricing.

What you need

Two places to put it

The same discount can be configured store-wide or on a single product. Pick one deliberately, because when both exist the product rule wins — there is a measured table for that at the bottom of this page.

UseWhen
Role Pricing (store-wide)Trade customers get the same percentage off everything. One screen, one row, done
Dynamic Pricing tab (per product)The trade discount varies by product, or only some products have one

Route 1 — the whole catalogue

  1. Go to WooCommerce → Dynamic Pricing and open the Role Pricing tab.
  2. Find the row for your wholesale role. Tick Enabled.
  3. Set Type to Percentage Discount and Amount to 25.
  4. Save Changes.

That is the entire configuration. There are no quantity fields on this screen on purpose — a role discount applies to every product, at every quantity.

What the customer is charged

Measured with the rule above, on two products at different list prices:

Signed in asList priceCharged
Retail customer$100.00$100.00
Retail customer$40.00$40.00
Wholesale customer$100.00$75.00
Wholesale customer$40.00$30.00

25% off, whatever the product costs. Add a product tomorrow and it is covered without touching the rule.

Route 2 — one product

  1. Edit the product, and open the Dynamic Pricing tab in the Product data panel.
  2. Click Add Pricing Group.
  3. Set Applies To to Specific Roles, then pick your wholesale role from the list that appears.
  4. Leave Rule Processing Mode on Bulk.
  5. Fill the row: From 1, To *, type Percentage Discount, amount 25.
  6. Update the product.

The * in To means “no upper limit”. From 1 to * is how you say “at any quantity” — the same row shape a quantity break uses, with the tiers left out.

What the customer is charged

Measured on a $100.00 product with the rule above:

Signed in asQuantityUnit priceCharged
Not signed in1$100.00$100.00
Not signed in4$100.00$400.00
Retail customer1$100.00$100.00
Retail customer4$100.00$400.00
Wholesale customer1$75.00$75.00
Wholesale customer4$75.00$300.00

If you configure both, the product rule wins

A cart line that a product rule has already discounted is left alone by the store-wide role rule. They do not add up, and the customer does not automatically get whichever is cheaper.

Measured with both configured — a store-wide 25% for the wholesale role, and a per-product quantity break giving 10% from 5 units — on a $100.00 product:

Signed in asQuantityChargedApplied by
Retail customer1$100.00
Retail customer5$450.00the product rule
Wholesale customer1$75.00the role rule
Wholesale customer5$450.00the product rule

Look at the last row. At one unit the wholesale customer pays $75.00; at five they pay $90.00 each, because the product's quantity break took the line and the role discount was withheld from it. Buying more made it worse.

That is precedence working as designed rather than a fault, but it is not what a trade customer expects. If wholesale customers buy in quantity, put the whole trade price structure in one place — give the product rule its own Specific Roles tiers, as in Route 2, instead of relying on the store-wide rule to fill the gaps.

Variations on the same rule

You wantChange
A flat amount off rather than a percentageType → Price Discount, amount 25 — $25.00 off each unit
A set trade price, not a reductionType → Fixed Price in the product tab, amount 75
Several trade tiers — silver, goldOne role each, one rule each. Route 1 handles all of them on one screen
Trade customers also get quantity breaksRoute 2, with more than one row — see Quantity Breaks
A discount for logged-out visitors insteadApplies ToGuests
Trade pricing on one category onlyThe Category Pricing tab, on the same settings screen