Mercenza – B2B for WooCommerce

Plugin Banner

Mercenza – B2B for WooCommerce

by ProPluginsLab

Download
Description

Mercenza adds a wholesale side to a WooCommerce store without a second shop. Buyers apply for a trade account, you approve them, and from then on they see their own prices, their own minimum quantities, and only the products you want them to see. Retail customers notice nothing.

Everything is explained inside the plugin: every setting has a short description, every screen has a plain language introduction, and the Help screen holds the full documentation.

Customer groups

  • Unlimited groups with their own prices, display rules, and ordering rules.
  • Each customer is in one group. A group can inherit from a parent group, which supplies the prices and settings the group does not set itself.
  • Group settings for price display, price suffix, catalog mode, stock display, tax display, minimum and maximum order value and quantity (with your own wording for the minimum notices), order notes, buyer portal, and recurring orders.
  • Assign customers one by one, in bulk, or by importing a CSV file.
  • See each user’s group in a column on the WordPress Users screen, and filter that list by group.
  • Optional WordPress role per group, created with the group and removed when the group is deleted.

Wholesale pricing

  • Fixed price, percent off, or amount off, per product and per variation.
  • Prices per group and prices negotiated for one customer.
  • Quantity tiers (“10 or more: 8.50”) shown as a table on the product page.
  • Dynamic rules: conditions on group, customer, company, product, category, tag, attribute, cart total, quantity, day of the week, date range, order history, shipping country, and currency, with discounts, free shipping, and buy X get Y.
  • A price inspector that shows exactly which rule produced the price a customer sees, and why.
  • Bulk editor for many products at once, and CSV import and export of prices and tiers.
  • Prices on sale, in the cart, at checkout, in the REST and Store API, and in order totals, with a snapshot stored on the order.

B2B catalog control

  • Mark a product, or a whole product category, as wholesale only or retail only. Hidden products disappear from the shop, search, related products, sitemaps, the REST and Store API, and direct links return a 404.
  • Visibility and purchase rules per group, per guest, or for everyone, targeting products, variations, categories (with their subcategories, if you choose), tags, or brands.
  • Minimum, maximum, step, and pack size per product or per rule, enforced in the cart, at checkout, and in the Store API.
  • Catalog mode per group: hide the cart, show an enquiry button, or read only browsing.
  • Hide the whole store from visitors who are not logged in.
  • Wholesale only information on product pages: lead time, case dimensions, case weight, HS code, country of origin, and your own fields.

Trade registration

  • A form builder with text, select, radio, checkbox, country, state, address, file upload, consent, and custom HTML fields.
  • Approval queue with notes, rejection reason templates, and bulk actions.
  • Automatic approval rules, disposable email blocking, honeypot, and captcha (reCAPTCHA v2 and v3, hCaptcha, Cloudflare Turnstile).
  • Registration emails for the applicant and for you, with editable text.
  • Onboarding emails that guide a new trade customer through their first order.

Companies and sub accounts

  • A company record with legal name, trading name, VAT number, registration number, addresses, and notes.
  • Sub accounts with roles (owner, purchaser, approver, viewer, or custom) and per person permissions.
  • A per person “Place orders” permission and order limit, enforced in the cart, at checkout, and in the Cart and Checkout blocks: a viewer cannot buy, and an order above the member’s limit cannot be placed.
  • An address book shared by the company.
  • Invitations by email, with a permission change notice.

Ordering tools

  • Quick order form: add many products at once by name, SKU, barcode, or a pasted list.
  • Shopping lists that a buyer can reorder in one click, and recurring orders on a schedule.
  • Reorder button on past orders and a frequently purchased panel.
  • A tidy B2B area in My Account that follows your theme, shown to the customers you choose: only members of a group or company, or every logged-in customer.

Built for a real store

  • Setup wizard and a dashboard that shows what needs attention.
  • Append only audit log with a diff view, filters, CSV export, and retention.
  • Fine grained capabilities for every admin action, and log in as a customer.
  • Append only in app notifications, with optional Slack, Microsoft Teams, and webhook delivery, sent in the background with automatic retries.
  • REST API under mercenza/v1 with strict permission callbacks, and WP-CLI commands.
  • HPOS (custom order tables) and Cart and Checkout blocks compatible.
  • Works with any theme and translates with WPML or Polylang.

Privacy and security

  • Every form has a nonce and a capability check; every query is prepared.
  • Sensitive fields are encrypted at rest and never written to logs.
  • Customer data is part of the WordPress personal data export and erase tools.
  • Rate limits on registration, VAT checks, and REST list endpoints.

External services

Mercenza can use the services below. Each one is off until you turn it on, nothing else leaves your site, and no usage data is collected.

EU VAT number check (VIES, optional, off by default). Only when you turn on Settings > Registration > Check VAT numbers online, and an applicant enters a VAT number from an EU country on the registration form, the plugin sends the two letter country code and the number to the European Commission’s VIES service to confirm the number is registered. This happens as the applicant finishes typing it (after a short pause) and again when the form is submitted, and the result (valid, invalid, or unknown) is stored with the application. A valid result is cached for a day, so the same number is not checked again within that time. While the setting is off, nothing is sent and VAT numbers are reviewed manually. Service: VIES, legal notice, privacy policy.

UK VAT number check (HMRC, optional, off by default). With the same setting on, for a VAT number starting with GB the check sends the number, without the country code, to HM Revenue and Customs’ “Check a UK VAT number” API. Service: API documentation, terms of use, privacy notice.

Captcha (optional, off by default). When you choose a captcha provider for the registration form and enter its keys, the form loads the provider’s script and, on submit, sends the visitor’s captcha response, IP address, and your site address to that provider for verification: Google reCAPTCHA (terms, privacy), hCaptcha (terms, privacy), or Cloudflare Turnstile (terms, privacy).

Slack and Microsoft Teams (optional, off by default). When you paste an incoming webhook URL and pick events, each of those events sends a short message (title, summary, a few facts such as a customer or company name, and a link back to your admin) to that URL. Nothing is sent until you add a URL. Slack: terms, privacy. Microsoft Teams: terms, privacy. The Teams message names the Adaptive Card schema (adaptivecards.io) as an identifier inside the message; that address is never contacted.

WooCommerce webhooks (optional). Webhook topics you create under WooCommerce > Settings > Advanced > Webhooks are delivered by WooCommerce to the delivery URL you enter, signed by WooCommerce with your webhook secret. Failed deliveries of Mercenza topics are retried after 5, 30 and 180 minutes.

Pro version

Mercenza Pro is a separate, standalone edition. It contains everything in this free edition and adds:

  • Quote requests: a quote basket, negotiation with counter offers, quote PDFs, expiry and reminders, and conversion to an order.
  • Net terms, purchase orders, deposits, invoices, credit limits per company, store credit, and statements.
  • Order approval chains inside a company, with thresholds and an approval trail.
  • Tax exemption certificates, VAT status kept per company, and reverse charge.
  • B2B shipping rules, freight quotes, and pickup slots.
  • Sales reps with their own workspace, commissions, and dormant account follow up.
  • Reports, price lists as CSV or PDF, scheduled price list emails, and WooCommerce Analytics.
  • Integrations with Elementor, Stripe, Mollie, Authorize.Net, PDF Invoices, WPML, and more.

This free edition is complete on its own and nothing in it is locked or limited. Pro is a separate plugin that uses the same settings and data. While Pro is active the free plugin stays idle and shows a notice, so you can deactivate it yourself; nothing is deactivated for you.

More plugins from ProPluginsLab

Free on WordPress.org:

Pro plugins at propluginslab.io:

  1. Install and activate WooCommerce.
  2. Upload the mercenza-b2b-for-woocommerce folder to /wp-content/plugins/, or install it from Plugins, Add New.
  3. Activate the plugin. The setup wizard opens and creates your first wholesale group.
  4. Place the Mercenza Registration Form block, or the [mercenza_registration_form] shortcode, on a page so buyers can apply.
  1. System health flags problems such as a missing persistent object cache or orders whose prices were edited after checkout.

    System health flags problems such as a missing persistent object cache or orders whose prices were edited after checkout.

  2. Group prices, tiers, audience and wholesale info for one product.

    Group prices, tiers, audience and wholesale info for one product.

  3. Mercenza adds its own boxes to the order screen.

    Mercenza adds its own boxes to the order screen.

  4. Tier prices and the next tier hint appear under the price.

    Tier prices and the next tier hint appear under the price.

  5. The B2B area brings the buyer's tools together.

    The B2B area brings the buyer's tools together.

  6. Variations are listed under their product with their own quantity field.

    Variations are listed under their product with their own quantity field.

  7. Each topic on the left opens its own group of settings.

    Each topic on the left opens its own group of settings.

  8. The DEFAULT B2B flag marks the group that approved applicants join.

    The DEFAULT B2B flag marks the group that approved applicants join.

  9. Pending applications show a yellow PENDING badge.

    Pending applications show a yellow PENDING badge.

  10. Every answer from the form is listed, with internal notes on the right.

    Every answer from the form is listed, with internal notes on the right.

Do retail customers see wholesale prices?

No. A price belongs to a group, and a visitor who is not in a group sees your normal WooCommerce price.

Can I hide products or a whole category from retail customers?

Yes. Set the audience on a product in its Mercenza tab, or on a product category when you edit it. Products that are wholesale only vanish from the shop, search, feeds, and the API for everyone else, and their links return a 404.

Can I keep the B2B area out of sight for retail customers?

Yes. Settings > General > Who sees the B2B area has two choices. “Only customers in a Mercenza group or company”, the default on new installs, gives the B2B tab in My Account and the B2B buttons to group and company members only, so retail customers shop as usual and see nothing wholesale until you add them to a group. “All logged-in customers” gives them to everyone who is logged in. Customers who applied for a wholesale account can always see their Application page.

Can a customer be in more than one group?

No. Each customer is in one group: their own, or else the group of their company. Assigning a new group replaces the old one. A group can inherit from a parent group, so “Distributors” can sit under “Wholesale” and set only what differs. For prices, the most specific source wins: a price for that customer, then a price for their company, then the group prices (fixed price, then discount, then category rule, then catalog wide rule). At each group step the customer’s own group is checked first, then its parent, up the chain. Settings > Pricing > Price source order changes the order of the sources, and the price inspector on the Pricing screen shows the decision for any product and customer.

Does it work with variable products?

Yes. Prices and tiers can be set per variation, and the variation picker shows the wholesale price.

Can I import existing wholesale prices?

Yes. Tools has CSV importers for customers, companies, sub accounts, applications, group prices, customer prices, tiers, and pricing rules, each with a dry run and an error report. There are also migrators for B2BKing, Wholesale Suite, Wholesale X, and WHOLS.

How do I change the look of the B2B pages?

Copy any file from the plugin templates folder to yourtheme/mercenza/ and edit the copy. Email templates are the exception: copy them to yourtheme/woocommerce/emails/, the folder WooCommerce uses.

Is it compatible with High-Performance Order Storage?

Yes, and with the Cart and Checkout blocks.

Where is the documentation?

Inside the plugin, under Mercenza, Help. Every settings field also links to the page that explains it.

Where is the source code of the JavaScript files?

The compiled files in assets/build are generated from the human readable sources in assets/src, which ship with the plugin together with package.json and webpack.config.js. To rebuild them, run npm install and then npm run build in the plugin folder.

1.2.3 – 2026-10-22

  • New: “Who sees the B2B area” setting under Settings > General. “Only customers in a Mercenza group or company” gives the My Account B2B tab, “Add to list” and the Reorder action to group and company members; “All logged-in customers” gives them to every logged-in customer. New installs start with members only, and stores updating from an earlier version keep “All logged-in customers”. Customers who applied for a wholesale account can always open their Application page.
  • New: “Include subcategories” for category visibility and purchase rules, so one rule covers a whole range of categories. It is on for new rules, and rules saved earlier keep covering their own category until you switch it on. Variations follow their product’s categories, and a rule on a subcategory still wins for the products in it.
  • New: “Minimum order value message” and “Minimum order quantity message” settings under Settings > Ordering to word the order minimum notices your way.
  • New: “Also block coupons for guests in the guest group” setting. “Block coupons for wholesale customers” applies to logged-in members of a group, and guests who get the guest group’s prices keep coupons unless you switch this on.
  • New: WP-CLI wp mercenza catalog visibility ... --subcategories=<yes|no>, and include_children on the catalog visibility REST route.
  • Improved: Order minimum and maximum notices appear once on the classic checkout.
  • Improved: Mercenza keeps a customer’s VAT exempt status that another plugin set, and only clears the status it set itself.
  • Improved: Hidden product lists are worked out in one pass for categories that contain variable products.

1.2.2 – 2026-10-19

  • Fix: Pre-orders paid by deposit or on release with Anticipo Pre-Orders Pro now charge the right amount to customers with a group price. Mercenza put the full group price back over the deposit, so the customer paid the whole price at checkout and still owed the balance on release. The deposit and the balance are now worked out from the group price, including quantity tiers and pricing rules.

1.2.1 – 2026-10-18

  • Fix: Pages no longer stop with a critical error for logged in customers who have completed or processing orders. Since 1.2.0 the checkout block fields asked for the customer’s past orders before WooCommerce had set up its order types.
  • Fix: A customer’s order history that cannot be read no longer stops a page; rules based on past purchases simply do not match.

1.2.0 – 2026-10-17

  • Fix: Mercenza no longer changes, shows, or corrects the price of a cart line it did not price itself. Lines priced at runtime by other plugins (product configurators such as Kitero, name your price such as Inputo, gift cards, product bundles and composites) keep their price in the cart, the Price column, and the order, where they could become 0.00 before.
  • Fix: The purchase order number field now appears on the Checkout block, as it does on the classic checkout.
  • Fix: CSV imports from Tools and price imports no longer cancel each other. Each importer has its own background task and only runs its own jobs.
  • Fix: Uploading a price CSV file failed with an error since 1.1.0.
  • Fix: The sub account “Place orders” permission is enforced. A member without it, such as a Viewer, cannot add products to the cart or check out.
  • Fix: The order limit of a sub account is enforced in the cart, at the classic checkout and on the Cart and Checkout blocks.
  • Fix: The dashboard order figures subtract refunds and count only orders in the store currency.
  • Fix: The Company fact in Slack and Teams registration messages is filled in.
  • Fix: An unknown wp mercenza import type now lists the available types.
  • New: Google reCAPTCHA v2 (the “I am not a robot” checkbox) as a registration captcha provider.
  • New: Confirmation prompts (with –yes) for wp mercenza migrate rollback, settings import, catalog delete and price delete, plus migrate rollback –dry-run.
  • Improved: Slack and Microsoft Teams messages are sent in the background and retried when they fail, and failed Mercenza webhook deliveries are retried after 5, 30 and 180 minutes.
  • Improved: The documentation gives the correct email template folder (yourtheme/woocommerce/emails/) and no longer mentions development phases.

1.1.2 – 2026-10-17

  • Fix: deleting a customer group now also removes the WordPress role Mercenza created for it, and moves its members to the Customer role.
  • Fix: wp mercenza group assign 0 <user_ids> removes the users’ group membership, as its help text says, instead of stopping with an error.
  • Docs: the readme and built in documentation now describe group membership and the REST API accurately (one group per customer, group changes over REST need a logged in dashboard session; integrations use mercenza()->memberships() and the mercenza_user_group_changed action).

1.1.1 – 2026-10-16

  • Fix: when a product has both a customer group price and quantity tiers, the cart now charges the tier price for the quantity in the cart instead of the single unit group price.

1.1.0 – 2026-10-15

  • New: Users > All Users shows each user’s customer group in a new column, with a dropdown to list only the users of one group. Visible to staff who can manage Mercenza customers.
  • Security: Slack and Microsoft Teams messages are sent with the WordPress safe request function, which refuses local and private network addresses.
  • Security: uploaded price import files are stored in a protected sub folder with its own access rules.
  • Improvement: the plugin description lists only what this edition contains.
  • Tested with WordPress 7.1.3 and WooCommerce 11.2.1.

1.0.1 – 2026-10-15

  • The Pro banner on the Settings screen now shows to everyone who may change Mercenza settings, including shop managers, instead of only to users who can manage plugins.

1.0.0 – 2026-10-15

  • First public release.
Back to top