WooCommerce

WooCommerce Wholesale Pro Review: Add B2B Pricing and a Wholesale Area to Any Store

WooCommerce Wholesale Pro by Barn2 adds wholesale pricing tiers, role-based discounts, a wholesale registration flow, and a dedicated wholesale ordering interface to any WooCommerce store.

WooCommerce Wholesale Pro Review: Add B2B Pricing and a Wholesale Area to Any Store review on GPL Times

A surprising number of WooCommerce stores end up needing wholesale pricing eventually. The pattern usually goes like this: you launch a retail store. A boutique calls and asks if they can buy 50 units at a discount to resell. You quote a one-off price by email. Three weeks later, a distributor wants tiered pricing. Then a restaurant asks if you do trade discounts. Suddenly half your inbox is wholesale negotiations and you have no system to handle them.

WordPress core gives you a single price per product. WooCommerce gives you a single price per product. There is no built-in concept of "different prices for different customer types" in either. You can hack it with role-based discount plugins, custom code, or coupon codes, but none of those scale gracefully to a real B2B operation.

WooCommerce Wholesale Pro by Barn2 turns any WooCommerce store into a proper hybrid retail + wholesale store. Customers see retail prices by default. Logged-in wholesale customers (in one of the wholesale roles you define) see their discounted wholesale prices on every page, including search, category pages, individual products, and cart. The plugin handles the registration flow for new wholesale customers, role-based discounts, per-category and per-product overrides, restricted payment methods, custom registration fields, and a dedicated "Wholesale Store" table layout for fast bulk ordering.

This review covers what the plugin does, how the workflow looks in practice, the settings sections explained one by one, the developer hooks worth knowing, and where the plugin.

Table of contents

What WooCommerce Wholesale Pro does

The plugin extends WooCommerce with a complete wholesale pricing layer that sits alongside (not replacing) your retail pricing.

A second pricing layer

Every product in WooCommerce already has a price (and optionally a sale price). WooCommerce Wholesale Pro adds a third concept: the wholesale price, which is calculated automatically per customer role based on the rules you set, or set explicitly per product if you want exact control. Anonymous visitors and standard "Customer" role users see retail prices. Wholesale-role users see wholesale prices everywhere.

A wholesale registration flow

Out of the box, anyone can register as a Customer on a WooCommerce store. The plugin adds a separate registration form and flow specifically for wholesale applications. New wholesale registrations can be auto-approved or queued for admin review. Once approved, the customer gets an email with login credentials and immediately sees wholesale prices.

Role-based discounts and tiers

You can define multiple wholesale roles (Bronze Distributor, Silver Distributor, Gold Distributor) each with different discount levels. Per-category and per-product overrides let you fine-tune the pricing rules. The plugin computes the right price for each customer on every page request.

A dedicated wholesale ordering interface

Rather than forcing wholesale customers to navigate your retail catalogue and add products one at a time, the plugin offers a "Wholesale Store" page that displays all products in a table with quantity inputs. Customers can fill in 20 quantities in one shot and bulk add to cart. Much faster than the standard shop flow.

Restricted payment and shipping by role

Wholesale roles can have restricted payment methods (e.g. wholesale customers only see bank transfer, not Stripe) and restricted shipping options. Useful for B2B stores where wholesale terms differ from retail terms.

WooCommerce Wholesale Pro Settings page in WordPress admin showing the General sub-tab with sub-nav (General, Roles, Layout, Emails, Registration Fields, Payment roles, Shipping roles), License key field, Wholesale login page, Wholesale registration toggle, Moderate new registrations checkbox, Wholesale store page selector, and Login redirect URL field, with a "What do you think of WooCommerce Wholesale Pro?" sidebar offering a Leave a Review button

Core features

The feature set is broad but focused. Eleven things actually matter.

Multiple wholesale roles

Define as many wholesale roles as you need: Bronze, Silver, Gold, Distributor, VIP. Each gets its own pricing rules. WordPress role-based plugins (like User Role Editor) can layer on additional permissions per role.

Role-based global discount

Set a discount percentage (or fixed amount) per role applied to every product. A "Bronze Wholesale" role might get 15% off everything; "Gold Wholesale" might get 30%.

Per-category discount overrides

Override the role’s global discount for specific product categories. Useful when some product lines have thinner margins and cannot absorb the full role discount.

Per-product wholesale pricing

Set an exact wholesale price on individual products via the WC product edit screen. This overrides any role or category rules.

Quantity-based tiered pricing

Configure tiers like "buy 10+, get 5% extra off" or "buy 100+, get 15% extra off" applied on top of the base wholesale price.

Wholesale registration form

A shortcode-based form ([wholesale_registration]) lets you place a registration form anywhere on your site. Submissions can be auto-approved or queued for moderation.

Custom registration fields

Add unlimited custom fields (business name, tax ID, business type, expected order volume) to the wholesale registration form. Required vs optional, free text or dropdown.

Hide prices from non-wholesale visitors

For pure-wholesale stores where retail visitors should not see prices at all, the plugin can hide all prices and show "Login for price" instead. Drives registration conversions.

The Wholesale Store table layout

A dedicated front-end view where wholesale customers can order from a fast table interface. Configurable via the Layout settings tab.

Restricted payment methods per role

Hide certain payment methods from specific roles. Common setup: standard customers see all methods, wholesale customers only see bank transfer and purchase orders.

Restricted shipping methods per role

Same idea for shipping. Wholesale customers might only get freight options; retail customers see standard ground.

How wholesale customers experience the store

The customer-facing experience is intentionally smooth once approved.

Logged-in wholesale customer browsing

After login, every product page shows the wholesale price instead of the retail price. The price is displayed in your standard product template, so it looks native to your theme. Sale prices, if any, are calculated from the wholesale price.

Cart and checkout

Cart totals reflect wholesale prices. Tax handling can be configured separately for wholesale (often tax-exclusive for B2B sales). At checkout, the customer only sees the payment and shipping methods enabled for their role.

Minimum order requirements

If you set a minimum order amount per role, the checkout blocks orders below that threshold with a clear message ("Wholesale orders require a minimum of $250").

Returning customer experience

Returning wholesale customers log in via your standard WC login form (or a wholesale-specific login page if you configured one) and immediately see their wholesale prices everywhere. No extra clicks.

How wholesale pricing is calculated

Understanding the order of precedence is essential for setting up the plugin correctly.

The precedence chain

When the plugin needs to display a price for a wholesale customer, it walks through these checks in order:

  1. Per-product wholesale price: if a specific product has a wholesale price set on its product edit screen, that price wins.
  2. Per-category discount: if no per-product price exists, check whether the product’s category has a custom discount for this user’s role.
  3. Per-role global discount: if no category override, apply the user’s role-level global discount percentage to the retail price.
  4. Quantity tier discount: on top of the calculated price, apply any quantity-based discount if the cart quantity hits a tier threshold.

Worked example

Retail price of "Premium Widget" is $100. The customer is in the "Silver Wholesale" role.

  • Per-product price: none set, move to step 2.
  • Per-category discount: the widget’s category has no Silver-specific discount, move to step 3.
  • Per-role global discount: Silver gets 25% off. Wholesale price = $75.
  • Quantity tier: customer adds 12 to cart. Silver tier is "buy 10+, additional 5%". Final per-unit price = $75 × 0.95 = $71.25.
  • Cart line total: $71.25 × 12 = $855.

Tax handling

WooCommerce treats taxes as either included in or added to displayed prices. The wholesale plugin respects whichever mode your store is in, but you can override per-role via the wcwp_prices_follow_tax_status filter. Common pattern: retail prices include VAT, wholesale prices exclude VAT (so B2B customers see the pre-tax number).

Sale prices

If a product has a retail sale price (regular $100, sale $80), the wholesale price is calculated from the regular price by default, not the sale price. You can change this via the wcwp_calculated_wholesale_sale_price filter if you want wholesale customers to benefit from sales too.

Wholesale user roles and tiered pricing

The Roles tab is where the bulk of your configuration happens.

WooCommerce Wholesale Pro Roles tab showing a Wholesale User Roles table with columns for Role, Global % discount, Product-specific pricing, Tax status, Price display, Default role, and Users, with one Wholesale role row showing None discount, Active pricing, Inherited tax/price display, and an Add new role button

Default role on activation

When you first activate the plugin, it creates one wholesale role called "Wholesale" with no discount. Click into it to configure the global discount, default tax handling, default price display, and minimum order amount.

Adding new roles

Click "Add new role" to create additional roles. Common configurations:

  • Tier 1 (Bronze): 10% global discount, accessible to all approved wholesale customers
  • Tier 2 (Silver): 20% global discount, requires reaching a sales threshold
  • Tier 3 (Gold): 30% global discount, manually upgraded by admin
  • Distributor: 40% global discount, limited to verified resellers

You can also use roles for non-discount differentiation: "Restaurant" role gets a different tax treatment, "Charity" role sees prices marked "Donation" instead of "Sale", etc.

Per-role settings

For each role you configure:

  • Discount type: percentage off retail or fixed amount per product
  • Discount value: the actual number
  • Tax status: inherit from WC, or override (include/exclude tax)
  • Price display: how prices are formatted on the page (with VAT label, without, etc.)
  • Minimum order amount: blocks checkout below this threshold
  • Default role: which role new approved wholesale registrations get assigned to

Tiered pricing within a role

For quantity tiers, the plugin integrates with Barn2’s "WooCommerce Discount Manager" plugin (sold separately). You can also do tiered pricing manually by creating quantity rules on individual products.

The wholesale registration flow

Onboarding new wholesale customers is one of the most-used features. Here is how it works end-to-end.

Step 1: Visitor lands on the registration page

You place the [wholesale_registration] shortcode on a page (typically /wholesale-apply/ or /wholesale-registration/). The page renders the registration form with your custom fields.

Step 2: Visitor submits the form

The form collects name, email, password, and whatever custom fields you defined (business name, tax ID, expected order volume, etc.). Submit creates a WordPress user with the "Pending" status if moderation is enabled, or "Wholesale" role directly if auto-approve is on.

Step 3: Admin reviews (if moderation is on)

Admin gets an email notification about the new application. They review the submission in Users → All Users, filter by Pending role. Approve by changing the user’s role to a wholesale role, or reject by deleting the user.

Step 4: Customer gets approval email

On approval, the plugin fires an email to the customer notifying them their wholesale account is active. The email contains a login link and a brief description of how to access wholesale pricing.

Step 5: Customer logs in and sees wholesale prices

The customer logs in via your standard WC login form. Their role is now a wholesale role, so they immediately see wholesale prices everywhere on the site.

Custom registration fields

The Registration Fields tab lets you build the wholesale signup form with custom labelled fields. Each field can be free text, dropdown, checkbox, or required/optional.

WooCommerce Wholesale Pro Custom Registration Fields tab showing a table builder with Label and Required columns and several blank field rows ready to be populated with custom registration field labels for the wholesale signup form

The Wholesale Store table layout

The Wholesale Store is the plugin’s killer feature for high-volume wholesale customers.

WooCommerce Wholesale Pro Layout settings tab showing a Wholesale Layout configuration with a recommendation to install WooCommerce Product Table plugin, and a mockup of the Wholesale Area table with columns for Image, Product, SKU, Price, and Buy, displaying four sample products with quantity inputs and Add to Cart buttons

What it is

A page on your site that renders all wholesale-available products as a single table. Each row shows the product image, name, SKU, price (with the wholesale discount applied), quantity input, and Add to Cart button. Customers can fill in quantities across many rows and add everything to cart with a single click.

Why it matters for B2B

Retail customers usually browse the shop, click into individual products, read descriptions, add one or two items. B2B customers typically reorder from a known list at known quantities. They want a spreadsheet, not a magazine. The Wholesale Store table is that spreadsheet.

Configuration

The Layout tab in plugin settings lets you control the columns shown, the page where the table is rendered, the filter/search behaviour, and pagination. For richer tables (variations, custom columns, advanced filtering), Barn2 sells a separate WooCommerce Product Table plugin which integrates here.

Performance

The table is rendered server-side, so initial page load is fast even for stores with 500+ products. Per-row Add to Cart actions use AJAX so the customer can fill the cart without a full page reload.

Product and category visibility controls

Beyond pricing, the plugin handles which products are visible to which user types.

Product-level visibility

Each product gets a "Wholesale visibility" setting on its edit screen: "Visible to all" (default), "Wholesale only" (hidden from retail), or "Retail only" (hidden from wholesale).

Category-level visibility

Same options apply at the category level. Useful for catalogues split into "retail" and "wholesale-only" sections.

Login-required catalogue

For pure-B2B stores, you can require login to see any product. Visitors land on a registration/login page; the rest of the catalogue is invisible until authenticated.

Hide prices for non-wholesale visitors

Less restrictive option: show all products to everyone but hide prices unless logged in as wholesale. Replaces the price with "Login for wholesale pricing".

How to install and configure the plugin

A standard install plus seven steps to a working setup.

Step 1: Install WooCommerce first

WooCommerce must be active. WC tested up to version 10.x as of this writing. HPOS order storage is supported.

Step 2: Upload and activate the plugin

Plugins → Add New → Upload Plugin, pick the zip, install, activate.

Step 3: Create your first wholesale role

Go to WooCommerce → Settings → Wholesale → Roles. The default "Wholesale" role exists; you can rename it or add new ones. Set the global discount percentage.

Step 4: Set up the registration page

Create a new WordPress page (e.g. /wholesale-apply/). Add the [wholesale_registration] shortcode to the page content. Decide whether to enable moderation (recommended) or auto-approve.

Step 5: Configure email notifications

Go to the Emails sub-tab. Customize the wording of the registration approved, declined, and pending emails. Test by sending yourself a sample.

Step 6: Set up the Wholesale Store layout

Decide if you want the dedicated wholesale ordering page. If yes, create a page (e.g. /wholesale-store/), add the relevant shortcode (or rely on the plugin’s auto-render), configure the columns in the Layout tab.

Step 7: Test the full flow

Open an incognito browser, visit your wholesale registration page, fill out the form, submit. Switch to your admin browser, approve the user. Switch back to incognito, log in with the new account, verify wholesale prices show on product pages, and check the Wholesale Store layout.

That is the minimum viable setup. From here you can add per-category overrides, restricted payment methods, custom registration fields, and additional wholesale roles as your business grows.

Settings explained, section by section

The plugin’s settings live at WooCommerce → Settings → Wholesale, with seven sub-tabs.

General tab

Top-level configuration including license, login/registration page URLs, login redirect, default price display option, and global wholesale registration toggle. Most stores configure this once and leave it.

Roles tab

The role list and per-role configuration described above. The most-used tab during initial setup.

Layout tab

Configures the Wholesale Store table view: which page hosts it, which columns appear, search and filter behaviour, pagination.

Emails tab

Lists the five wholesale-specific email templates with edit links for each. You can override the subject, heading, and body of each email.

Registration Fields tab

Custom field builder for the wholesale registration form. Each field has a label, type, default value, required toggle, and helper text.

Payment roles tab

Restricts payment methods per role. Common configuration: wholesale roles see "Direct Bank Transfer" and "Cheque", retail customers see "Credit Card" and "PayPal".

Shipping roles tab

Same idea for shipping zones and methods. Wholesale customers might get freight shipping options that retail customers do not.

Email notifications and what fires when

Five email templates ship with the plugin. Each can be customized in the Emails sub-tab.

WooCommerce Wholesale Pro Email notifications tab showing five wholesale email templates: New wholesale user, New wholesale account, Wholesale registration approved, Wholesale registration declined, and Wholesale registration pending, each with text/html content type, recipients column, and Manage buttons

New wholesale user

Sent to the admin when a new wholesale registration is submitted. Includes the applicant’s details and a link to review in the admin.

New wholesale account

Sent to the customer when their account is created (regardless of whether it is auto-approved or pending moderation). Welcomes them and explains the next step.

Wholesale registration approved

Sent to the customer when admin approves their pending application. Includes a login link and brief instructions.

Wholesale registration declined

Sent to the customer when admin rejects their application. You can customize the message to be polite ("We are unable to approve your application at this time").

Wholesale registration pending

Sent to the customer when their registration is queued for review. Sets expectations on review time.

Customization options

For each email, you can override:

  • Subject line
  • Email heading (the bold text at the top of the body)
  • Recipient (for admin emails)
  • Content type (HTML or plain text)
  • Full email body (via the WC email template override mechanism)

For deeper branding, copy the email template files from the plugin to your theme’s woocommerce/emails/ folder.

Developer hooks and filters

The plugin exposes 33 filter hooks and ~10 action hooks, all prefixed wcwp_. Here are the ones I have actually used.

Adjust the calculated wholesale price

add_filter( 'wcwp_calculated_wholesale_price', function ( $wholesale_price, $product, $user_id ) {
 // For products in the "clearance" category, double the discount
 $categories = wp_get_post_terms( $product->get_id(), 'product_cat', [ 'fields' => 'slugs' ] );
 if ( in_array( 'clearance', $categories, true ) ) {
 $retail_price = $product->get_regular_price();
 $extra_discount = ( $retail_price - $wholesale_price ) * 0.5;
 return $wholesale_price - $extra_discount;
 }
 return $wholesale_price;
}, 10, 3 );

Useful when category-specific pricing rules cannot be expressed via the standard role/category settings.

Skip wholesale pricing for specific products

add_filter( 'wcwp_disregard_wholesale_pricing', function ( $disregard, $product, $user_id ) {
 // Brand-new products (less than 30 days old) sell at retail price even to wholesale customers
 $publish_date = strtotime( $product->get_date_created() );
 if ( $publish_date > strtotime( '-30 days' ) ) {
 return true;
 }
 return $disregard;
}, 10, 3 );

Control which products a role can see

add_filter( 'wcwp_product_current_user_allowed_by_role', function ( $allowed, $product_id, $user ) {
 // "Distributor" role cannot see retail-only seasonal products
 if ( in_array( 'distributor', $user->roles, true ) ) {
 $is_seasonal = get_post_meta( $product_id, '_is_seasonal', true );
 if ( $is_seasonal === 'yes' ) {
 return false;
 }
 }
 return $allowed;
}, 10, 3 );

Customize the login redirect for wholesale customers

add_filter( 'wcwp_login_redirect', function ( $url, $user ) {
 // After wholesale login, send to the Wholesale Store table instead of My Account
 if ( count( array_intersect( $user->roles, [ 'wholesale', 'silver_wholesale', 'gold_wholesale' ] ) ) > 0 ) {
 return home_url( '/wholesale-store/' );
 }
 return $url;
}, 10, 2 );

React when a new wholesale customer is created

add_action( 'wcwp_created_customer', function ( $user_id, $form_data ) {
 // Sync new wholesale signup to CRM
 if ( function_exists( 'my_crm_sync_lead' ) ) {
 my_crm_sync_lead( [
 'user_id' => $user_id,
 'email' => get_user_meta( $user_id, 'billing_email', true ),
 'business_name' => $form_data['business_name']?? '',
 'tax_id' => $form_data['tax_id']?? '',
 'lead_source' => 'wholesale_signup',
 ] );
 }
}, 10, 2 );

Force cache exclusion on wholesale-aware pages

add_filter( 'wcwp_prevent_caching', function ( $prevent, $page_id ) {
 // Always prevent caching of the shop page and the wholesale store page
 $shop_id = wc_get_page_id( 'shop' );
 $wholesale_store_id = get_option( 'wcwp_wholesale_store_page_id' );
 if ( in_array( $page_id, [ $shop_id, $wholesale_store_id ], true ) ) {
 return true;
 }
 return $prevent;
}, 10, 2 );

Modify the wholesale registration shortcode tag

add_filter( 'wcwp_register_shortcode_tag', function ( $tag ) {
 return 'partner_registration'; // change [wholesale_registration] to [partner_registration]
} );

Useful for white-labelled stores where "wholesale" is the wrong word for your business.

Common use cases

Specific scenarios where the plugin shines. For heavier B2B requirements (quote requests, net-30 invoicing, multi-step registration with admin approval, EU VIES VAT validation, sub-accounts under a parent company), the closest alternative is B2BKing, which trades simplicity for a bigger feature surface.

B2B store with retail side

A coffee roaster sells direct to consumers (retail) and to cafes (wholesale). Same product catalogue, different prices per audience. Wholesale customers register through a verified-business form, get bulk pricing, see freight shipping options at checkout.

Verified-reseller program

An apparel brand wants to sell to independent boutiques. Boutiques apply via a wholesale form with their business license number. Admin verifies licenses against a state registry, approves verified businesses. Approved resellers see 40% off retail pricing.

Trade-show pre-orders

A trade show event opens for two days. The brand enables wholesale pricing for attendees with a special trade-show role. After the event, the role is disabled. Attendees who placed orders keep their discount; future visitors see retail.

Restaurant supply

A specialty foods supplier sells exclusively to restaurants. The site uses login-required catalogue (anonymous visitors see only a registration page). Approved restaurants see the full catalogue with restaurant-specific pricing. The Wholesale Store table layout lets them order 30 items in 60 seconds.

Distributor tier program

A consumer goods brand has Bronze, Silver, Gold distributor tiers. Bronze gets 10% off, Silver 20%, Gold 30%. Distributors are manually upgraded by the sales team based on annual purchase volume. The plugin’s role-based discount handles the tier system entirely.

Mixed retail / wholesale events

For a Black Friday promotion, wholesale customers get an additional 10% off on top of their existing wholesale discount. Implemented via the wcwp_calculated_wholesale_price filter that applies the extra discount only during the promotional window.

If two of those scenarios sound familiar, the plugin is going to pay for itself within the first month.

Performance, caching, and compatibility

Performance impact

The plugin adds per-request work: checking the user’s role, looking up their wholesale price for each visible product, applying any quantity tier discounts. On shop pages with 20-50 products, this is invisible. On large catalogue pages with 200+ products or complex tier rules, you may see 50-200ms added to page load. The plugin caches computed wholesale prices in transients to mitigate.

Caching plugins

This is the critical gotcha. Full-page caching serves the same HTML to all visitors, which means wholesale customers may see retail prices from the cache. The plugin tries to prevent caching of wholesale-aware pages via the wcwp_prevent_caching filter, but you should also add manual exclusions in your cache plugin:

  • Exclude any page using the [wholesale_registration] or [wholesale_login] shortcodes
  • Exclude /wholesale-store/ and the shop/category/product pages for logged-in users
  • Use a cache plugin that supports cookie-based exclusions (logged-in users get a different cache key)

WP-Optimize Premium and most modern cache plugins handle this correctly out of the box. If you use a CDN with edge caching, double-check that the CDN respects the logged-in cookie.

WP-CLI

The plugin includes a small set of WP-CLI commands for batch operations: wp wcwp users approve, wp wcwp users decline, etc. Useful when bulk-approving applications.

WooCommerce HPOS

The plugin has been updated for High-Performance Order Storage. Confirmed working on WC 8.x and 9.x with HPOS enabled.

Multisite

Per-site configuration works fine on multisite networks. Cross-site role inheritance is not supported; each site has its own wholesale roles and configurations.

Third-party integrations

  • WPML, Polylang, TranslatePress: multilingual wholesale labels and email templates supported
  • WC Subscriptions: wholesale prices apply to subscription products
  • WC Bookings: wholesale prices apply to bookings
  • ACF, Meta Box, Pods: custom fields can be added to the registration form
  • WP All Import: wholesale pricing can be synced from a CSV via the wcwp_all_import_update_product action

Pricing and licensing

WooCommerce Wholesale Pro is sold by Barn2 Plugins as an annual subscription with single-site, 5-site, 20-site, and unlimited tiers. Pricing changes periodically; check barn2.com/wordpress-plugins/woocommerce-wholesale-pro/ for current numbers. Barn2 also sells a Plugin Bundle that includes Wholesale Pro plus WooCommerce Product Table, WooCommerce Quick View Pro, and several others; if you use multiple Barn2 plugins, the bundle is cheaper than buying each separately.

Install on staging environments and side projects without a separate license. For production stores where you want Barn2’s direct support, buy a direct license.

Frequently asked questions

Does this plugin work with all themes?

Yes, in principle. The plugin uses WooCommerce’s standard price display hooks, so wholesale prices appear wherever your theme displays retail prices. Themes with heavily customized product templates may need minor adjustments to honour the wholesale price display.

Can a customer be in multiple wholesale roles?

WordPress allows multiple roles per user, but the plugin uses the highest-priority wholesale role for pricing calculations. Configure your roles in priority order (Gold > Silver > Bronze) and the plugin picks the best applicable role for each customer.

What happens if I disable the plugin?

All wholesale pricing logic stops. Wholesale customers immediately see retail prices on their next page load. Configurations (roles, discount rules, registration fields) remain in the database. Re-enabling the plugin restores the full functionality without data loss.

Can wholesale customers see retail prices alongside wholesale prices?

Yes, via the per-role "Price display" setting. Choose to show wholesale only, wholesale with a strikethrough on the retail price, or both prices side by side.

Does the plugin handle currencies for international wholesale customers?

The plugin respects WooCommerce’s currency settings. For multi-currency stores, pair with a currency switcher plugin; wholesale prices will be displayed in the active currency.

Can I require approval for some roles and auto-approve others?

Not directly via the UI. The "Moderate new registrations" toggle is global. Workaround: enable moderation globally, then use the wcwp_new_user_auto_approved action to programmatically auto-approve specific applications based on form data (e.g. auto-approve emails ending in known partner domains).

Will the plugin slow down my checkout?

Checkout is not noticeably slower. The pricing calculation happens at cart load and is cached for the duration of the cart. Checkout itself just reads the cached prices.

Does it work with WooCommerce Subscriptions?

Yes. Subscription products honour wholesale pricing at the time of purchase and on each renewal. Renewals at the wholesale customer’s current role discount.

Can I exclude specific products from wholesale pricing?

Yes, via the per-product "Disregard wholesale pricing" toggle on the product edit screen, or via the wcwp_disregard_wholesale_pricing filter for programmatic control.

How does it handle tax for B2B customers?

The plugin can override the WooCommerce tax display mode per role. Common configuration: retail prices include VAT (consumer-friendly), wholesale prices exclude VAT (business-friendly). For complex VAT scenarios (EU B2B, US sales tax nexus), pair with a dedicated tax plugin.

Can wholesale customers pay later (net 30, net 60)?

Yes, by configuring a custom payment method (e.g. "Pay on Account") that is only available to wholesale roles via the Payment roles settings. The order is placed without immediate payment; you invoice the customer separately and reconcile when payment arrives.

Does the registration form support CAPTCHA?

Not built-in. Pair with a separate anti-spam plugin (reCAPTCHA, Cloudflare Turnstile) or use Cloudflare Bot Management at the edge. For sites with high registration spam, this matters.

Can I migrate existing customers to a wholesale role?

Yes. In WP admin → Users, select the customers, use the bulk role change, and pick a wholesale role. They will see wholesale prices on their next page load.

Who should install this plugin

WooCommerce Wholesale Pro is the right install if any of these apply:

  • You run a WooCommerce store that has wholesale or B2B customers (existing or planned).
  • You currently handle wholesale pricing manually via email negotiations and coupon codes.
  • You want a clear separation between retail customers and approved trade customers.
  • You need tiered pricing (Bronze/Silver/Gold) for distributor programs.
  • You want a fast bulk-ordering interface for B2B customers (the Wholesale Store table).
  • You need restricted payment or shipping methods for specific customer groups.
  • You sell to verified resellers and need a structured registration and approval flow.

Skip it if your store is purely retail with no B2B side, or if you only need a one-off discount for one customer (a custom coupon code is enough for that).

Spend 30 minutes configuring your first wholesale role, build a registration page, test the approval flow, and you have a working B2B layer on top of your existing WC store. From there, scaling to tiered programs, restricted payments, and the Wholesale Store table view is a matter of incremental configuration.