Woocommerce Wholesale Ordering

Wholesale pricing and ordering system for Woocommerce

Requires WooCommerce version 3.7 or higher and PHP 5.5 or higher
(PHP 7 or higher STRONGLY recommended)

Integrates with the WooCommerce User Role Pricing plugin.

Purchase the Wholesale Ordering and User Role Pricing bundle and save!

Save even more with the Wholesale Ordering and User Role extensions bundle (includes User Role Pricing and User Role Minimums)!

Check the bundle page for special bundle upgrade pricing information if you already own the Wholesale Pricing plugin.

Originally developed for my wife’s web site ( http://paychiguh.com ), this extension for Woocommerce allows you to set up separate wholesale prices for each product & variation in your Woocommerce shop.

With this extension for Woocommerce, you can create Wholesale Customer user accounts that allow those users to see and order at wholesale prices. Easily filter orders in the admin dashboard by Wholesale or Retail orders. Many features and configuration options.  See the list of features below, and the screen shots to get a better idea of what you can do with this plugin.

Try before you buy on your own personal demo site.

Read the documentation here.


  • New in Version 3
    • Orders with the custom “Wholesale Pending” status can now be edited on the WooCommerce Orders page
    • Compatibility with WooCommerce 3, as well as compatibility updates for WPML/WCML and Aelia Currency Switcher when used with WooCommerce 3+
  • New in Version 2.8.4
    • You can create a custom shop message for retail customers and guests
    • Wholesale Customers can pay for their order on the My Orders page when you have payment disabled at checkout for Wholesale Customers and are using the Wholesale Pending order status
    • When showing retail prices in the wholesale price prefix or suffix, you can now set it to only show the regular price (as opposed to showing the sale price when the product is on sale for retail customers).
  • New in Version 2.8
    • Full compatibility with WPML/WCML, including multi-currency support
    • Full compatibility with Aelia Currency Switcher
    • Full compatibility using the combination of WPML for multilingual and Aelia Currency Switcher to handle multi-currency functions
    • Manually sync variable products at any time, via Ajax loop to prevent timeouts
    • Lots of behind the scenes code optimizations and improvements that will help speed up page load times, especially when used in conjunction with User Role Pricing
    • See the newly updated docs pages, including new pages for WPML/WCML integration, Aelia Integrations, and User Role Pricing integration.
  • New in Version 2.6.4
    • “Hide Wholesale Only products” option in general setting section. Checked by default so that the prior behavior doesn’t change. You can now un-check this option if you want to show all products to all customers. Un-checking the box will show Wholesale Only products to non-wholesale customers, but they won’t see the prices and they won’t be able to add the products to their cart.
    • “Wholesale Only Price text” option allows you to define the short text that will appear in place of the price for Wholesale Only products when viewed by non-wholesale customers (if the above new option is un-checked).
    • “Wholesale Only error text” in the Messages and Text settings section now allows you define, or remove, the error message text shown to non-wholesale customers of the individual product page for Wholesale Only products.
  • New in Version 2.6.0
    • Added compatibility with the WooCommerce Product Addons plugin. Works for both wholesale and retail customers.
    • Added an option to allow wholesale customers to backorder products.
    • Added an option to not show stock status and inventory to wholesale customers (useful when used with above new option).
    • Modified the way that wholesale vs retail customer and prices are set on the admin edit order page for manually creating or editing orders.
  • New in Version 2.5.2
    • Added an option to make wholesale only variations inactive for retail customers.  If you have a variable product with some variations that are wholesale only, and others that are not, and if there is more than one attribute for the variations (meaning more than one select box before they can add to cart), and you enable this feature, then the specific combination of attributes for wholesale only variations will not be able to be selected by retail customers or guests. Some themes/browsers may also gray out those specific selections (depending on the combinations required to get a wholesale only variation).  Leaving this disabled (default) will allow them to select the wholesale only variation, in which case they get the wholesale only variation message the same way the plugin has functioned up to now (and there will be no price or add-to-cart button).
  • New in Version 2.5
    • Added a Wholesale Shipping Tax Class to the plugin settings (Taxes section) to allow you to specify which tax class should be applied to shipping for wholesale customers. Previously products were taxed based on wholesale product tax class settings, but shipping was still getting taxed based on the regular WooCommerce settings. This setting will apply to public side orders as well as when you manually create orders from the admin orders page.
    • Modified the way wholesale info is displayed and saved for variations of a variable product to be compatible with the upcoming 2.4 version of WooCommerce (still in beta) which now saves variations via AJAX. These new modifications to my plugin are still compatible with current versions of WooCommerce.
  • New in Version 2.4
  • New in Version 2.3.0
    • Mostly behind-the-scenes code optimization and a bit of cleanup. Now the plugin stores a list of “wholesale only” products, and a list of products with no wholesale price, in the WordPress options database table to speed up the process of checking for products that should be hidden from one user type or the other (depending on your settings). These lists will be automatically updated any time you edit/save a product in the admin dashboard. This way the plugin doesn’t have to iterate through all products with each Woocommerce product query to determine which ones to remove from the query. This will speed up page load times if you have a LOT of products in your catalog.
    • Products that should be hidden from wholesale or retail customers (depending on your settings) will now also be hidden within the Woocommerce widgets as well, or from any non-loop (shop type page) product display that uses a WordPress query to retrieve products. WooCommerce has their own query class for the main shop/categories loops that I hooked into previously, but WooCommerce uses a more generic WordPress post query for their widgets, so I had to find other hooks to tap into to remove the products from those queries.
    • Updated the translation file with one string in the admin settings that was omitted.
    • Changed an early call to a WooCommerce function, added in 2.2.0, that could potentially cause a fatal error if somehow WooCommerce was not fully initialized before my plugin.
    • Since several customers had previously created a Wholesale Customer role before installing my plugin, my plugin will now check for that role and add the needed capability to make my plugin work correctly with the existing role (if that capability doesn’t already exist). This is only done once during plugin activation. If the role doesn’t exist, my plugin will create the role with the needed capability.
  • New in Version 2.2.0
    • Added “Wholesale Only Categories” and “Retail Only Categories” to the Wholesale Orderings settings page. You can select multiple product categories for each option to only show those categories to the respective customer type. Works to hide categories from the other customer type in the main shop loop (when showing categories) as well as the categories widget.
    • When manually editing or creating orders from the admin dashboard, prices for any added products will now be based on the role of the selected customer. Added a Customer Type display that will refresh via AJAX when you select a different customer. The Order type will also update based on the user role. Changing the order type independently does not affect pricing (based on user role only), and you will see a message if there is a mismatch.
  • New in Version 2.1.1 – Added new check box options for both the wholesale prefix and suffix text to not show the prefix or suffix is there is no retail price for a product. This is useful if you are using the tags to show retail price in either the prefix or suffix, but don’t want the retail price to show for wholesale only products. Then you can leave the retail price blank or set to zero, and not see “FREE” for retail price. Also added a “Wholesale Only” check box to Grouped products so that the parent grouped product can be hidden from retail customers, in addition to whatever products belong to that group.
  • New in Version 2.1 – Added an option to hide ALL prices and add-to-cart/buy buttons unless a user is logged in. This can be helpful if you don’t want your wholesale customers to see retail prices (which they could before if they weren’t logged in). However, it also means that guest can’t see prices or order anything until after they create an account and log in. You can also define the text that appears in place of the price, as well as define the link to your login page (most of the time, you will probably want to go to the Woocommerce My Account page).
  • New in Version 2.0:
    • See the updated docs page for more details
    • Lots of code refactoring and simplification
    • WPML compatibility (mostly)
    • Template override for Germanized plugin to alter tax display settings for wholesale customers.
    • Allow FREE products for wholesale customers
    • Per Product Wholesale Tax Status and Wholesale Tax Class settings. Now products can have separate tax status and tax class settings for wholesale customers and retail customers. Product Wholesale Tax Class setting will override the global Wholesale Tax Class setting, allowing you to set up different wholesale tax classes for any number of products.
    • Can now define your own minimum order error message shown to wholesale customers on the cart and checkout pages if the minimum order amount has not been reached yet.
    • Changed the hook used to check for minimum orders to resolve conflicts that sometimes caused the minimum order error to appear even after the amount had been met.
    • Lots of filter hooks added, and some conditional functions added, for other plugins to extend the functionality of the plugin
  • New in Version 1.5:
    • A separate wholesale price suffix text field has been added on the Wholesale settings page, giving you a completely different suffix for use with Wholesale price displays on the shop and product pages (retail has its own suffix on the WooCommerce Tax settings page). Tags have been added to both the Wholesale Prefix and Suffix field to allow you to show the retail price (which will include any suffix you set up for retail prices), as well as a line-break tag so you can put retail and wholesale prices on separate lines (WooCommerce strips all html out when those settings are save, so I added tags to allow line-breaks, which is replaced at output time).
    • A body class has been added to all WooCommerce pages to show if the logged in customer is wholesale or retail, allowing you to target any other elements on the page and style them different based on if the body class contains “wholesale” or “retail”.
    • Classes have been added to the prefix and suffix text to allow targeting and styling.
  • New in Version 1.4 – Added the option to indicate if wholesale prices are entered including or excluding taxes. This setting is now an independent setting for Wholesale customers, and along with the previously added two select boxes to show how prices are displayed in the shop and cart/checkout pages, as well as the separate tax class, you can now completely control tax settings and display options separately for wholesale and retail customers. Note that if you select a different tax class for wholesale customers on the wholesale settings page, that will override individual product tax class selections for wholesale customers only (whatever you select on a product level will still apply to retail customers). See the docs page for detailed explanation of the new Independent Wholesale Tax Options.
  • New in Version 1.3 – You can now choose whether or not Wholesale prices in the shop and on the cart/checkout pages will be shown inclusive/exclusive of taxes. These settings are independent from the same settings on the Tax settings page of WooCommerce, allowing you to show prices differently for Wholesale and Retail customers (needed in some countries). Right now this only works properly if you set the global “Prices Entered With Tax” option in WooCommerce to “No” (the default setting), and then use the settings further down the WooCommerce Tax settings page to decide if you want to show prices including or excluding taxes for non-wholesale customers in the shop and on cart/checkout pages (two select boxes). Then use those same select box options on the Wholesale settings page to decide if Wholesale customers will be shown prices inclusive or exclusive of taxes. Note that if you disable taxes for Wholesale customers (option on the Wholesale settings page) those two select boxes on the Wholesale settings page will have no affect since no taxes will be calculated for Wholesale customers.
  • New in version 1.2 – Create “wholesale only” products that will be hidden from the public and regular customers. There is now a check box next to the wholesale price fields for each product or variation. Checking that box will make the product only visible to logged in users who have the “Wholesale Customer” role. (currently not shown in screen shots)
  • Define wholesale prices for each product and variation
  • Wholesale prices can be edited with quick edit (simple products), Bulk Edit, as well as within the regular product edit pages
  • For variable products, each variation has its own wholesale price (same as with regular and sale prices)
  • Adds Wholesale Customer role, which is the same as the Woocommerce Customer role, but with the capability to view and order at wholesale prices
  • Purchase Order field added to checkout page for wholesale customers only (not a required field).
  • Purchase Order column added to My Account page and View Order page for wholesale customers only
  • Choose whether or not wholesale customers need to pay at checkout.
  • Set text for button on checkout page for wholesale customers, such as “Send Order”
  • Choose whether or not wholesale customers are taxable – Version 1.1 now allows you to choose a separate tax class for Wholesale customers, if desired.
  • Choose whether or not wholesale customers can use coupon codes
  • Choose whether or not to calculate shipping for wholesale orders
  • Choose whether or not wholesale orders automatically decrease stock/inventory
  • Optionally create a separate Wholesale Terms & Conditions page. If you set the page for this in the wholesale settings page, there will be the standard Woocommerce terms and conditions agreement checkbox, but the link will open the wholesale terms & conditions page you specified if it’s a wholesale customer.
  • Several optional and customizable messages can be displayed to wholesale customers. One for the main shop page, one for the cart page, and one for the checkout page. Messages can be displayed in the Woocommerce message box style, or you can choose customizable message boxes that can be closed, and where you can specify colors and custom CSS styling.
  • Prefix text can be added to prices displayed to wholesale customers, such as “Wholesale Price”
  • Products without any wholesale price can either be hidden from wholesale customers, or you can optionally define simple text to show in place of the price, as well as a more detail message when a product or variation has no wholesale price
  • Wholesale prices are shown below the regular/sale prices on the admin product list page, making it easy to see any products you haven’t entered any wholesale price yet, or just for a quick check
  • Purchase Order column added to admin orders list page and edit page, and the Purchase Order field has been added to fields searched when you type in a search term on the orders page (quickly find an order by PO #)
  • Admin orders list page can be filtered by Retail or Wholesale order types
  • Adds a Wholesale Customer List report to the Customers tab of the WooCommerce Reports page, with action buttons to edit that user or view all orders from that user.

As of April 2017, with the release of WooCommerce 3, and the updates in the Dynamic Pricing plugin, it appears that Dynamic Pricing version 3.0+ is now working correctly with wholesale prices (tested with Wholesale Ordering version 3.0.0)!

NOTE: Wholesale pricing does NOT currently work with the Product Bundles extension, but you can still use the extensions for retail customers.

Due to the way Product Bundles overrides the normal WooCommerce hooks for retrieving prices, and adds their own custom price getting functions, and has custom add-to-cart templates and javascript for adding bundles to cart, you can not currently create Product Bundles with wholesale prices. I have added some additional code to resolve some conflicts so that you can still use Product Bundles for retail customers, but if you want to use these 2 extensions together, I recommend that you choose the setting to hide products without wholesale prices from wholesale customers. This will prevent Product Bundles from showing up on the shop pages when a wholesale customer is logged in, since if a wholesale customer orders one of the bundles (at retail price) it will mess up the wholesale pricing for any single products that are also included in the bundle when in the cart and checkout pages. Unfortunately, Product Bundles is replacing WooCommerce functions with its own, and not providing enough hooks of its own to allow Wholesale prices to work for bundled products at this time. I’m trying to find a work around, but if you have purchased the Product Bundles extension and want it to work with my Wholesale Ordering plugin, it would be helpful to put in a support ticket and try to get them to add some compatibility functions (since they have already included special compatibility functions for several other plugins in their code).

WPML Compatible

Screen Shots (updated at version 2.5.0):


Average rating: 5.00 out of 5 stars
13 reviews
5 stars
4 stars
3 stars
2 stars
1 star
  • Excellent Plugin

    We are using it on two client sites to manage their wholesale requirements.
    Works great. Managed to get all up and running without the help of support.

  • A superior plug-in for Woo Commerce

    My partner and I have a small herbal company, which has mostly wholesale customers both domestic and international, however, we would like to be able to attract retail buyers, as well. It was quite astonishing to me that Woo Commerce does not make provision within its functionality to support two pricing platforms. Therefore, I was very pleased to find Stephen’s plugiin; it has lived up to its advance billing, and proven to be an excellent product. Thank you!!

  • Great Plugin

    Great plugin so far thank you very much

  • Awesome support for a great plugin

    Super dooper support from Stephan on this. Plugin works really well and the support is second to none. Highly recommend!!

  • top of the bill plugin by top of the bill developer

    We have been using the Wholesale order plugin for over a year now and it and i have no other words for that stephen did a great job delivering this comprehensive and complete plugin. It is by far the best wholesale addition which is available currently.

    During the past months Stephen developed another plugin for our company in addition to this wholesale plugin and therefore I have been working closely on this. I cannot say otherwise that it has been a great pleasure to work with him. Stephen is very skilled and truly delivers what is required. He has a great customer focus, fast replies and understand the business requirements. Rather then delivering a quick and dirty solution he makes sure the solution is durable, stable and build to last. Although it was not a fixed price project, I think Stephen delivered more then what was requested and helped us to greatly improve our service offering to our customers. From the 1st start like getting a very extensive estimate (which shows that he knows what he is talking about) to the build until go-live his support has been impeccable.
    I would certainly recommend any plugin or any custom development made my Stephen as it is a
    a relieve to work with someone like him 😉

  • Fantastic product and service

    Stephen’s plugin is fantastic and he provides the best support I’ve seen from any plugin developer. Highly recommended.

  • Excellent Support!!!

    Stephen backs his product up with the most important aspect of any digital purchase, his support. WordPress is an evolving platform continually being updated which requires plugins to follow suite, it is even more important when you have a plugin built for the purpose of supporting another plugin as is the case with woocommerce and Stephens plugin.
    His support for his product so far in my experience is 1st class and very prompt, where as others in my experience will reply in 2, 3 or even more days later Stephen has responded almost immediately and when you are developing a website or even have it live this so important.
    Thank you Stephen

  • Great plugin with even better support!

    I have to say, I tend to have a high expectation of customer service and support levels. This developer so far has exceeded those expectations. Best wholesale plugin for the money, with an absolutely amazing response time for support questions. Very detailed support with suggestions or advice on other issues as well. I highly suggest using this plugin for your wholesale needs. You cannot go wrong.

    Thanks for the amazing plugin and the outstanding support Stephen.

  • Great Plugin and best support

    I am very hapy to buy this plugin. It work very well and support is incredible fast.

  • Great plugin and incredible support

    I tried a lot of other plugins and combination of plugins to get a good working and simple to use B2B wooocommerce shop in addition to our B2C shop. Stephens plugin was by far the most simple one and still does exactly what a B2B shop needs to do! No overload so even a shop manager who’s not a woocommerce pro or familiar with php can customize it. And as mentioned before by other people: Stephen proivides an outstanding customer service, answers every question within hours and helps you to get the best out of the plugin for your shop! Thank you for such a great work!

  • Incredible Customer Service

    I cannot say enough about Stephen’s customer service. He responds immediately to questions and support tickets with a thorough, simple answer in plain English so that anyone using this plug in can quickly implement the solution. The plugin works perfectly and is essential to our site which sells B2C and B2B with equal frequency. I could not be happier.

    BTW had a similar plugin on WPeC without this ease of use and with the world’s worst customer service, so Stephan has been such a breath of fresh air for our website! I can’t thank him enough.

  • Just great!

    Phantastic plugin to easily combine wholesale and retail on one platform without any additional installs, nasty workarounds or complicated programming. And the support is unmatched in reaction time and quality. Great job, Stephen!

  • Wholesale Ordering

    Excellent plugin, does exactly what I wanted. Perfect for any small to medium businesses who sell both direct and to retailers or re-sellers.

  • You must log in and be a buyer of this download to submit a review.

    Comments are closed.