Different Prices for Different Users in WooCommerce
Show different prices for different users in WooCommerce: role-based pricing, per-customer rates, tax display, cart totals and how to keep the catalogue consistent.

Selling the same product at different prices is ordinary commerce — trade rates, contract pricing, member discounts — but WooCommerce treats price as a property of the product, not of the relationship. Making price depend on who is looking touches more of the store than most people expect.
Choose the smallest model that works
Three models, in ascending order of maintenance cost:
- Role tiers. A handful of roles, each with a percentage or fixed price. Easiest to reason about and to audit.
- Role plus category. Different margins per product family, still without per-product data entry.
- Per-customer overrides. Negotiated prices for named accounts. Powerful, and the first thing to go stale when a supplier price changes.
Most stores that ask for per-customer pricing actually need three role tiers and two exceptions.
Price is displayed in more places than you think
A role price applied only to `woocommerce_get_price_html` produces the classic bug: the product page shows the trade price, the cart charges retail. Cover the whole path:
- Product and archive display
- Add-to-cart and cart line totals
- Order review and payment amount
- Order confirmation email and invoice
- The REST API, if you feed a marketplace or an app
```php add_filter( 'woocommerce_product_get_price', function ( $price, $product ) { $role = df_current_pricing_role(); $rule = df_price_rule( $product->get_id(), $role ); return $rule ? $rule : $price; }, 10, 2 ); ```
Filter the raw price rather than only the HTML, and the rest of WooCommerce follows automatically.
Tax display is half the perception problem
Trade buyers read prices excluding tax; consumers read them including tax. Showing a wholesale customer a tax-inclusive figure makes your trade discount look far smaller than it is, and showing a consumer an ex-tax figure looks like a bait-and-switch at checkout. Set the display mode per role and label it explicitly next to the price.
Caching and consistency
Any page that shows a price must not be cached across roles. Either vary the cache by role cookie or exclude logged-in sessions from full-page caching. This is the single most common cause of "the wrong price appeared" reports, and it is invisible in testing because administrators are rarely served cached pages.
Doing it as configuration
Wholesale & Role-Based Pricing applies per-role and per-customer prices across display, cart and checkout in one pass, with tax display handled per role — €29.95 per year for the licence. Where the discount belongs to a whole range rather than an account type, Category Discount for WooCommerce is the free option.
If prices should be invisible to the public entirely, pair this with hiding prices from guests, and set the matching quantity limits by user role so trade minimums line up with trade pricing.
Audit the rules against a real order
Once a quarter, place a live order as each role and compare the price at every stage — product page, cart, payment, invoice. It takes ten minutes and catches the drift that reporting never surfaces.
FAQ
- How do I show different prices to different users in WooCommerce?
- Attach price rules to user roles or individual accounts and apply them through the price filters so the product page, cart, totals and emails all use the same figure.
- Can I give one specific customer their own price?
- Yes. Per-customer pricing is common for negotiated contracts, but keep the number of exceptions small — role tiers scale, individual overrides do not.
- Should wholesale prices be shown with or without tax?
- Trade buyers normally expect prices excluding tax and consumers expect them including tax. WooCommerce can display differently per role, and getting this wrong looks like a 20 percent price error.
- Do role prices work with sale prices and coupons?
- Decide the precedence deliberately: usually the lower of the role price and the sale price wins, and coupons are restricted for trade roles that already receive discounted rates.
- Will different prices affect caching?
- Yes. Page caches must vary by role or exclude priced pages for logged-in users, otherwise a retail visitor can be served a cached wholesale price.
This article is part of our WooCommerce pricing topic hub, where the related plugins and guides live together.


