WooCommerce for Wholesalers: 12 Configurations You Need
This is the checklist. Every B2B WooCommerce store needs most of these. Skip the ones that genuinely don't apply; ship the rest. The order matters — earlier items are prerequisites for later ones.
We've linked out to the detailed guide for each where one exists. If a guide doesn't exist yet, the summary here covers enough to get you 80% there.
1. User roles (define them first)
Every B2B rule you'll write keys off a role. Define your roles before you configure anything else.
Typical patterns:
- Single-tier wholesale:
wholesale_customer - Multi-tier dealers:
dealer_tier_1,dealer_tier_2,dealer_tier_3 - By relationship:
distributor,reseller,dealer,retail_partner
Three rules:
- Fewer is better. Three roles > ten roles. You can always add; you can rarely remove without migrating users.
- Stick with role-based, not user-based. Individual user overrides exist (and you'll use them sparingly) but the base logic should live in roles.
- Document what each role means in a wiki or README. Six months from now, nobody remembers why "tier 2" was 35% off instead of 30%.
add_action( 'init', function () {
add_role( 'wholesale_customer', 'Wholesale Customer', [ 'read' => true ] );
add_role( 'dealer', 'Authorized Dealer', [ 'read' => true ] );
});
2. Login-required catalog
B2B stores usually hide pricing (and often products) from the public. Reasons:
- Competitors scraping prices
- MSRP contracts requiring wholesale price confidentiality
- SEO — the retail site gets the search traffic; wholesale is for invited customers
Implementation: redirect unauthenticated visitors away from /shop/* and /product/*. See the B2B WooCommerce complete guide for the snippet; plugins like WooCommerce Private Store automate it.
Edge case: your B2B catalog might be a subset of a public retail catalog. In that case, don't hide the whole shop — just gate the wholesale-only products with role-based visibility rules.
3. Account registration with approval
Public B2B registration forms attract scrapers, fake businesses, and competitors. Don't auto-approve.
Options:
- Manual approval: new account → admin review → approved → role assigned
- Automated verification: VAT/EIN lookup → passes → auto-approved into role
- Invite only: no public registration; accounts created internally
For EU VAT numbers, the VIES service validates automatically. For US businesses, EIN verification exists but is fiddly; most stores accept manually-provided documents.
4. Role-based pricing
Same SKU, different price by role. The detail guide is here: How to Set Up Wholesale Pricing in WooCommerce.
Four patterns to pick from:
- Flat % off per role (simplest)
- Per-product wholesale price (most control)
- Tiered by quantity (volume breaks)
- Wholesale-only products (hidden from retail)
You'll probably use a combination. Keep retail price in _regular_price; put wholesale in separate meta. Hook woocommerce_product_get_price to substitute.
5. Tiered / volume pricing
"Buy 1-9: $60 each. 10-49: $55. 50+: $50."
Native WooCommerce has no tier breaks. Plugins that add this: Dynamic Pricing & Discounts, Advanced Dynamic Pricing, or roll your own.
Watch for: interaction between tier breaks and role discounts. Does "wholesale_customer buying 50 units" get the 20% role discount and the volume break, or does the role discount already include volume consideration? Decide up front.
6. Tax-exempt customers
Resellers (with resale certificates), non-profits (501(c)(3)), government buyers, diplomats. Each has a legitimate claim to not paying sales tax.
WooCommerce has native support via is_vat_exempt — the flag exists, there's just no UI to control it. See WooCommerce Tax-Exempt Customers: The Complete Setup Guide for the three approaches.
Audit trail is mandatory. Every exemption needs: who granted it, when, why, and the supporting document (certificate, letter) stored somewhere retrievable.
7. EU VAT / reverse charge
If your store is EU-based and sells cross-border to EU businesses, reverse charge applies. Different from general tax exemption.
Requires:
- VAT number validation via VIES
- Zero-rated invoice with the reverse charge legal reference
- EC Sales List / Intrastat reporting
Full walkthrough: EU VAT and WooCommerce: How to Handle B2B Reverse Charge. Use EU VAT Assistant (free) or a premium equivalent — don't DIY this.
8. Role-based shipping methods
Wholesale customers get freight. Retail gets USPS/UPS. Some dealers get free pickup.
woocommerce_package_rates is the filter. See How to Restrict Shipping Methods by User Role for patterns.
Don't skip this. If a wholesale customer accidentally selects USPS Ground on a 200-lb freight shipment, you eat the difference (or have an awkward conversation to upcharge).
9. Role-based payment methods
Net-30 customers shouldn't see credit card. Cash-on-delivery shouldn't show for international. Invoice-on-Account should be hidden from retail.
woocommerce_available_payment_gateways is the filter. See How to Hide Payment Methods from Specific Customers.
Both this and #8 can be managed with Role Based Methods — one plugin, one admin screen, both shipping and payment.
10. Minimum order quantities
"Wholesale orders require $500 minimum" or "minimum 10 units per SKU" or "case quantity only (multiples of 12)."
Validate at cart level, not checkout. The Min/Max Quantities for WooCommerce plugin is the standard shortcut. Manually:
add_action( 'woocommerce_check_cart_items', function () {
$user = wp_get_current_user();
if ( ! in_array( 'wholesale_customer', (array) $user->roles, true ) ) return;
if ( WC()->cart->get_subtotal() < 500 ) {
wc_add_notice( 'Wholesale orders require a minimum of $500.', 'error' );
}
});
11. Assisted ordering (login-as-customer)
Reps place phone orders. Support debugs customer carts. Admins test role-specific pricing.
Don't ask for customer passwords. Don't reset them. Use a proper impersonation tool with audit logging: How to Log In As a Customer in WooCommerce and How to Place an Order on Behalf of a Customer.
For assisted ordering specifically, Shop As Customer is what we ship.
12. Audit logging
Every change that affects money or permissions needs a log entry:
- Tax exemption granted / revoked
- Role assigned / changed
- Admin impersonating a customer
- Price override applied to a specific order
- Manual order placed by admin
This isn't paranoia; it's the answer to every audit, dispute, and debugging session. The first time an accountant asks "why wasn't this customer charged VAT on this order from March?" and you can produce the log — admin Maria granted exemption on March 12, reason: reseller certificate ST-120 — you'll feel very smart.
Most of this comes from your plugins. Anything worth buying logs its own actions. If you build something custom, add logging from day one.
The launch order
If you're setting up a new B2B store, do the configurations in this order:
- User roles (prerequisite for everything)
- Role-based pricing (test thoroughly before launch — the #1 source of "why is this customer paying retail" bugs)
- Tax exemption (if applicable to your customer base)
- EU VAT (if EU-based)
- Role-based shipping + payment (must match what your contracts specify)
- Minimum order quantities
- Registration / approval flow
- Login-required catalog (turn this on last — easy to forget about it while testing)
- Assisted ordering for reps
- Audit logging audit (verify every change leaves a trail)
Then open registration. Then announce.
What not to configure
Things to skip for the first version:
- Custom quote flows — unless your business explicitly requires RFQ before purchase, start with direct purchasing. Add quotes later if needed.
- Multi-step approval workflows — "customer requests order → manager approves → placed" is heavy. Most stores don't need it.
- Invoicing on account with complex dunning — start with simple "net 30, manual follow-up." Automate dunning once you have data.
- Per-customer product visibility — heavy, rarely useful. Role-based visibility covers 95%.
Ship lean. Add features based on real usage.
The honest stack
Here's what we'd install on a new B2B store, specifically:
- Pricing: WooCommerce Wholesale Prices or B2BKing
- Tax exemption: Tax Exempt
- EU VAT: EU VAT Assistant (Aelia, free)
- Checkout: Role Based Methods
- Assisted ordering: Shop As Customer
- MOQ: Min/Max Quantities for WooCommerce
- Registration: User Registration Approval
Seven plugins for most B2B stores. Some stores need fewer (no EU, no MOQ). A few need more (quote flows, custom invoicing). But seven is a reasonable center of gravity.
That's the checklist. If we missed a configuration that's central to your B2B setup, we'd love to hear about it: [email protected]. The next version of this list often comes from what readers tell us they needed that we didn't think to mention.