Free plugin Version 1.0.0 Updated

Mercenza - B2B for WooCommerce Free documentation

Mercenza adds a wholesale side to your WooCommerce store: customer groups, wholesale prices and quantity tiers, B2B only products, trade account applications with approval, company accounts and quick ordering tools.

Try the live demo Get Pro

Overview

Mercenza lets you sell wholesale from your existing WooCommerce store without running 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: a visitor who is not in a group sees your normal WooCommerce price.

The plugin is built around customer groups. Each group has its own prices, price display, catalog mode, stock display, tax display and order limits. On top of group prices you can add quantity tiers, prices for one customer or company, and dynamic pricing rules. Catalog rules hide products or block buying for guests, groups or everyone, and quantity rules set minimums, maximums, steps and pack sizes.

For buyers, Mercenza adds a B2B area in My Account with a quick order form (by name, SKU, barcode or a pasted list), shopping lists, reorders, recurring orders, company profiles and sub accounts. For you, there is a setup wizard, a dashboard, an approval queue, a price inspector, CSV import and export, migration from other wholesale plugins and an audit log. Everything is explained inside the plugin under Mercenza > Help.

Requirements

  • WordPress 6.4 or later
  • PHP 7.4 or later with the json, fileinfo and mbstring extensions
  • WooCommerce 8.2 or later, installed and active
  • The libsodium functions (included in PHP 7.2 and newer; WordPress bundles the sodium_compat polyfill for hosts that omit the extension)
  • Unique AUTH_KEY and SECURE_AUTH_KEY values in wp-config.php (placeholder salts block activation)

Installation

Mercenza needs WooCommerce. Install and activate WooCommerce first, then install Mercenza from WordPress.org. If a requirement is missing, activation stops and the message names the unmet requirement.

  1. Make sure WooCommerce 8.2 or later is installed and active.

  2. In your WordPress admin, go to Plugins > Add New.

  3. Search for Mercenza B2B for WooCommerce.

  4. Click Install Now on Mercenza - B2B for WooCommerce, then click Activate.

  5. The setup wizard opens. Follow it to create your first wholesale group, or open it later from Mercenza > Dashboard.

Quick start

  1. Run the setup wizard

    After activation the Setup wizard opens. Enter the name buyers see for the wholesale area (for example B2B, Trade or Wholesale) and click Start setup. Each answer is saved as you go, and you can change everything later on the regular screens.

  2. Decide who can browse and create your wholesale group

    In Store access, choose whether everyone can browse or only logged in visitors. In Wholesale group, use an existing group or create a new one, and choose how the group sees prices and whether it can buy online.

  3. Give the group a discount

    In Wholesale discount, enter a Percent off the regular price for the whole catalog (for example 20 makes a 100.00 product cost 80.00 for that group). Leave it empty to skip. You can set exact prices per product later under Mercenza > Pricing.

  4. Publish the application form

    In Applications, choose I review every application (recommended) or Approve everyone automatically, then click Create the application page. You can also place [mercenza_registration_form form="wholesale-application"] or the Mercenza Registration Form block on any page.

  5. Approve your first buyer

    When someone applies, the dashboard shows it under Needs your attention. Open Mercenza > Customers > Registrations, review the application and approve it. The buyer joins the target group and sees wholesale prices right away.

  6. Check what the buyer sees

    Open Mercenza > Pricing > Inspector, pick a product and the customer, and click Inspect to see the exact price and every step that produced it. Or use Log in as on the Customers screen to browse the store as that buyer.

#Setup wizard

The setup wizard configures the essentials in six steps: Welcome, Store access, Wholesale group, Wholesale discount, Applications and Done. It opens the first time you activate Mercenza and stays available from the dashboard checklist until you finish. You can use Back and Skip this step at any time, and nothing is shown to buyers until you decide.

  1. Welcome: enter the name of the wholesale area shown in My Account (default B2B) and click Start setup.
  2. Store access: choose between "Everyone can browse. Wholesale prices only appear for wholesale buyers." and "Only logged in visitors can browse. Everyone else is sent to the login page." The login, registration, privacy and terms pages always stay open. You can allow more pages later under Settings > Catalog.
  3. Wholesale group: use an existing group or Create a new group, then choose how the group sees prices and whether it can buy online.
  4. Wholesale discount: enter a Percent off the regular price for the whole catalog, or leave it empty to skip.
  5. Applications: choose I review every application (recommended) or Approve everyone automatically. Approved buyers join the group you set up. If no page shows the application form yet, click Create the application page.
  6. Done: a summary lists what is set up and what is left, with a link to each screen. Click Go to the dashboard.
Mercenza setup wizard on the Welcome step with the six steps listed on the left and a field for the wholesale area name
The wizard starts by asking what buyers should see as the name of the wholesale area.

#Dashboard

Mercenza > Dashboard is your wholesale overview: what needs attention today, how the business is doing and the steps left to finish setup.

  • Needs your attention: for example the number of applications waiting for review. A notice at the top of every Mercenza screen also links to pending applications.
  • Last 30 days: wholesale revenue and order count, retail revenue, and your top wholesale customers.
  • Recent notifications: new applications, group changes and other events.
  • System health: checks for the database schema, custom tables, Action Scheduler, object cache, conflicting wholesale plugins, capabilities, the encryption key, outdated template overrides and pricing integrity. Click Open Tools for details and fixes to go to the diagnostics screen.

A WARNING on Object cache only means price resolution could be faster with Redis or Memcached on busy stores. Mercenza still works without it.

Mercenza dashboard with Needs your attention, Last 30 days, Recent notifications and System health panels
The System health panel shows a status badge for each check, with a link to Tools.

#Customers

Mercenza > Customers lists every customer with their group, company, order count and amount spent. Use SEARCH and the GROUP filter (any group, No group, or a specific group), then click Filter.

  • Select customers with the checkboxes to assign a group to many people at once.
  • Click a name to open the profile, change the group or set Setting overrides for that one customer (any group setting can be overridden for a single customer).
  • When a customer belongs to a company, the Group column shows "(via company)" and the Company column shows their role.

Log in as lets staff see the store exactly as that customer does. The session lasts one hour, a banner with a return link is shown on every page, and start and end are written to the audit log. Administrators and shop managers can never be impersonated, and attempts are rate limited under Settings > Security.

The WordPress user edit screen shows the same group selector, the company and a summary of overrides.

Mercenza Customers screen with search, group filter and a table of customers with Log in as buttons
Customers in a company show their group as "via company" and their role in the company.

#Groups

Customer groups decide who sees wholesale prices and which rules apply. Start with one group such as "Wholesale" and add tiers later. Open Mercenza > Customers > Groups and click Add group.

The group editor has five tabs: General, Settings, Members, Rules and Onboarding.

General

  • Name, Slug (leave empty to generate it from the name), Description and Color tag.
  • Priority: higher wins when rules for several groups match.
  • Inherits from: a parent group. Settings left as inherit take the parent's value. A price set on a nearer group beats its parent.
  • WordPress role sync: members receive this role for plugins that work with roles. You can pick an existing role or create a dedicated one.
  • Default group for approved B2B registrations and Guest fallback group (visitors who are not logged in use this group). Only one group can hold each flag. The Groups list shows them as DEFAULT B2B and Guests.
  • Status: inactive groups are ignored.

Settings (each can inherit from the parent)

  • Ordering: Minimum order value, Maximum order value, Minimum order quantity, Maximum order quantity, Order notes required, Backorders (Product setting, Always allow backorders, Never allow backorders).
  • Pricing and catalog: Price display (Wholesale price only, Retail struck through with wholesale, Wholesale with savings percentage, "Login to see prices", Hidden completely), Price suffix (for example "ex VAT"), Catalog mode (Normal shopping, Hide add to cart, Show enquiry button instead of add to cart, Read only browsing), Stock display (Exact quantity, In stock or low stock only, Hidden), Tax display (Store default, Including tax, Excluding tax).
  • My Account: Buyer portal mode (an app like My Account with a quick order bar, live cart and keyboard shortcuts) and Allow recurring orders (on by default).

Members: add or remove members one by one.

Rules: assignment rules place customers into the group automatically by total spend, order count, email domain, billing country, a registration field value, a purchased product or a purchased category. Rules never override a manual assignment. They run when an order is completed or processing, when a user registers, and once a day for everyone.

Onboarding: emails sent after a customer is approved into the group, each with a subject, body, delay in days and active flag. You can use {first_name}, {last_name}, {group_name}, {site_title}, {my_account_url} and {shop_url}.

When you delete a group that has members, you choose where they go, for example No group (retail).

Mercenza Groups list with Name, Slug, Priority, Parent, Role, Members and Flags columns
The Flags column shows which group receives approved B2B registrations.

#Companies

A company groups several users under one business with a shared group and address book. Open Mercenza > Customers > Companies, search with SEARCH COMPANIES, or click Add company.

A company record holds the legal name, trading name, VAT number, registration number, addresses and notes. Tax id and VAT number are encrypted at rest.

Members have one of these roles: Owner, Purchaser, Approver, Viewer or Custom. Each role maps to permissions: place orders, view company orders, manage addresses, manage sub accounts and edit the company profile. Custom roles pick permissions one by one, and each member can have an order limit (orders above it are blocked).

  • A user belongs to at most one company.
  • The owner cannot be removed or demoted. Change the owner on the company first.
  • Owners and members who can manage sub accounts invite people by email from My Account > B2B > Sub accounts, or you invite them from this screen. The invitation link works once, expires after seven days and only works for a logged in user whose email matches the invitation.
Mercenza Companies list with Company, Group, Members, Terms and Status columns
Each company has its own group, members and status.

#Registrations

Mercenza > Customers > Registrations is the approval queue for trade applications. Filter by STATUS (All, Pending, Approved, Rejected, with counts) and SEARCH EMAIL OR ANSWERS, then click Filter.

Click an applicant to see every submitted value, uploaded documents, the VAT status, consent records, internal notes and reviewer history. Select several rows to approve or reject them in bulk.

  • Approve: the applicant joins the form's target group (or the default B2B group) right away and receives the approval email.
  • Reject: pick a reason from the templates set under Settings > Registration or write your own. The reason is emailed to the applicant, and the account is deleted after the number of days in Delete rejected accounts after (days).

Applicants can follow their status under My Account > B2B > Application.

Mercenza Registrations screen with a status filter, search field and a pending application
Pending applications show a yellow PENDING badge and the form they came from.

#Registration forms

Mercenza > Customers > Forms holds the forms customers fill in to apply. A Wholesale application form is created on activation. Click Add form to create another one.

Each form has:

  • Type: B2B forms put the approved user in the target group (or the group flagged as default for B2B registrations). B2C forms create a retail customer.
  • Fields: text, textarea, email, password, phone, number, select, multiselect, radio, checkbox, date, file, country, state, address, VAT number, company name, business type, website, hidden, heading, HTML, consent, first name and last name. Each field has a label, placeholder, help text, required flag, width, validation rules and conditions. Every form needs an email field.
  • Conditions: show a field only when other fields match. Hidden fields are never validated or stored.
  • Steps: assign fields to steps and turn on Multi step for a progress indicator.
  • Approval mode: manual review, automatic, email domain allow list, valid VAT number, or referral code (from a hidden field with id referral_code, filled from the ref link parameter). When an automatic mode does not match, the application falls back to manual review.
  • Reviewer approvals required: more than one turns on multi reviewer approval.
  • Settings: introduction, submit label, success message, pending page, redirect after approval, upgrade requests from logged in retail customers, login while the application is pending (use the default, block or allow), bot protection, allow disposable email domains, policy version recorded with consent, company creation on approval, and admin notification recipients.

The Shortcode column shows the code to place the form on a page, for example [mercenza_registration_form form="wholesale-application"]. You can also use the Mercenza Registration Form block.

Mercenza Forms list with the Wholesale application form, its type, approval mode, target group, submissions and shortcode
Copy the shortcode from the last column to place a form on any page.

#Pricing: bulk editor

Mercenza > Pricing sets wholesale prices per customer group. The Bulk editor tab lists products and variations with their Retail price and one column per group. Use FIND PRODUCTS (name or SKU) and Show groups to choose which groups appear.

In each cell, pick a price type and type an amount:

  • = a fixed price for that group.
  • % a percentage off the retail price.
  • - an amount off the retail price.

Apply to every product on this page changes many products at once. Choose the GROUP, choose SET AS, enter the value and click Apply:

SET AS Field that appears Result
Price AMOUNT The same fixed price for every product on the page
% off retail PERCENT A percentage off each product's retail price
Amount off retail AMOUNT A fixed amount off each product's retail price

Remove group price clears the selected group's prices on the page. Nothing is saved until you click Save. Changed cells turn yellow, and you can use Undo to step back. Cells that fail are highlighted with the reason.

You can also set prices on each product's Mercenza tab in the product editor, including per variation prices and prices for one customer or company.

Mercenza Pricing bulk editor with products, retail prices and Distributor and Wholesale price columns
Each group column has a price type selector (=, %, -) and an amount.
Apply to every product bar with SET AS set to Price and an AMOUNT field
With SET AS on Price, the bar asks for an AMOUNT.
Apply to every product bar with SET AS set to Amount off retail and an AMOUNT field
Amount off retail subtracts the AMOUNT from each retail price.

#Pricing: quantity tiers

The Tiers tab under Mercenza > Pricing lists quantity breaks such as "10 to 49: 5% off". Click Add tier to create one, or Edit and Delete on a row.

A tier has:

  • Scope: everyone, a group, a company or a customer.
  • Target: a product, a variation, a category or the whole catalog.
  • Quantity: the range, for example 10 to 49, or 50 and more.
  • Price: a fixed price, a percentage off or an amount off the resolved price.
  • Cumulative: per line, or counted across all variations of the product or across a whole category in the cart.

The most specific scope with a tier wins, then the most specific target. When Show tier table on product pages is on (Settings > Pricing), the product page shows a Volume pricing table and a "buy X more" hint. The cart uses the same tiers.

Quantity tiers table with Scope, Target, Quantity, Price and Cumulative columns
Two tiers for the same product: 10 to 49 and 50 or more.

#Pricing: import and export

The Import and export tab moves prices and tiers in CSV files.

Import CSV: the columns are type (price or tier), sku or product_id (an id, category:ID or all), scope_type, scope (group slug, customer email or id, or company id), kind, amount, currency, starts_at, ends_at, min_qty, max_qty and cumulative. Choose the file and click Validate. Every row is checked and previewed before anything is written. The import then runs in the background, can resume, and reports errors per row. Recent imports lists past imports.

Export: click Download all prices and tiers (CSV).

The maximum number of rows per file is set in Settings > Pricing > CSV import row limit. With starts_at and ends_at you can schedule promotional prices or future increases ahead of time.

Import CSV panel with column list, file chooser and Validate button, next to an Export panel
Validate checks every row before anything is saved.

#Pricing: inspector

The Inspector tab (Price Resolution Inspector) explains any price. Pick a PRODUCT, a CUSTOMER (leave it empty to price as a guest) and a QUANTITY, then click Inspect.

The result shows the base price source, the tier, the rules that ran, the final price and the other candidates that were considered. Use it whenever a buyer reports a price you did not expect.

Prices are resolved in the order set in Settings > Pricing > Price source order: a customer price, a company price, a group price (or the nearest parent group with one), a group discount, a category rule, a catalog wide rule, and finally the regular price. Quantity tiers apply next, then dynamic rules.

Price Resolution Inspector with Product, Customer and Quantity fields and an Inspect button
Leave Customer empty to see the price a guest pays.

#Pricing rules

Mercenza > Pricing > Rules holds automatic discounts and offers, for example "10 percent off for distributors", "buy 10 get 1" or "free shipping over 500". Rules run after explicit prices and tiers, highest priority first. Click Add rule to create one.

  • Conditions: group, user, company, product, category, tag, attribute, cart subtotal, cart quantity, date range, day of week, first order, order count, lifetime spend, shipping country and currency.
  • Actions: percentage discount, fixed discount, fixed price, buy X get Y, free shipping, gift product, and exclude from other rules.
  • Priority, a stop processing flag, a total usage limit and a per customer limit.

The Uses column counts how often each rule was used in orders.

Mercenza Rules list with Rule, Priority, Conditions, Actions and Uses columns
Each row summarizes the rule's conditions and actions.

#Catalog: visibility rules

Mercenza > Pricing > Catalog controls who may see and buy which products. On the Visibility tab, click Add rule and choose:

  • Who it applies to: Everyone, Guests (not logged in) or A customer group.
  • What it targets: A product, A single variation, A category, A tag or A brand.
  • The effect: Hide it, Show it, Show it, but block buying or Allow buying.

When several rules match, the most specific one wins: group beats guests beats everyone, and a variation beats its product, which beats its category, tag or brand. Use Show it to make exceptions inside a broader hidden rule.

Hidden products disappear from the shop, search, feeds, sitemaps, related products and the REST and Store API for that buyer. Opening one directly returns a 404 or redirects to the shop (see Settings > Catalog). Products that cannot be bought stay visible, and a cart line that becomes unavailable blocks checkout with a message.

You can also set an audience on a product's Mercenza tab (everyone, wholesale customers only, or retail customers only), or on a product category under Products > Categories with Mercenza audience. A category audience applies to all products in it and its child categories, and a product's own audience wins over its categories.

Visibility rules table with a rule that shows a category to guests but blocks buying
This rule lets guests see a category without being able to buy from it.

#Catalog: quantity rules

The Quantity rules tab sets minimum and maximum order quantities, steps (multiples) and pack sizes. Click Add rule, choose who it applies to and which products, then set at least one of minimum, maximum, step or pack size.

When several rules match, the most specific one wins for each limit: a group rule beats an everyone rule, and a variation beats its product, which beats its category. Quantity fields on a product's Mercenza tab apply to everyone.

A pack size implies the step and a minimum of one pack, and the product page shows "Sold in packs of X (price per pack)". Rules are checked on the product page, when adding to the cart, in the cart and at checkout, and in the Store API.

Quantity rules tab with an empty table and an Add rule button
Without rules, every product follows the catalog settings.

#Catalog: check a product

The Check a product tab (Check what a buyer sees) tells you whether a customer can see a product, buy it and order a given quantity. Pick a PRODUCT, a CUSTOMER (leave it empty to check as a guest) and a QUANTITY, then click Check. Use it to confirm visibility and quantity rules before you announce them.

Check what a buyer sees panel with Product, Customer and Quantity fields and a Check button
Leave Customer empty to check as a guest.

#Settings: General

Mercenza > Settings holds store wide rules. Pick a topic on the left, change what you need and click Save changes. Use FIND A SETTING to search for any setting by name. Every field has a description, a Learn more link and a way to reset it to its default.

The General topic covers labels, data retention and developer mode:

  • B2B area label: the name of the wholesale area in My Account and in the admin menu badges.
  • Keep data on uninstall: when on, deleting the plugin keeps its tables, settings and customer data so you can reinstall later. Turn it off only if you want everything removed when you delete the plugin. WooCommerce data and users are never removed.
  • Developer mode: writes detailed logs to WooCommerce > Status > Logs under the "mercenza" source. Turn it off on production stores.
  • Audit log retention (days): entries older than this are deleted by the daily maintenance task. Between 30 and 3650 days.
Mercenza Settings General topic with B2B area label, Keep data on uninstall, Developer mode and Audit log retention
The left column lists every settings topic with a short description.

#Settings: Pricing

The Pricing topic controls how wholesale prices are resolved, shown and combined with coupons.

  • Price source order: the order in which price sources are checked, highest priority first. Allowed values: customer, company, group, group_discount, category, global, regular. Unknown entries are ignored and missing ones are added at the end.
  • Base price for discounts: Regular price, or Sale price when set to start percentage and amount discounts from an active sale price.
  • Coupons with wholesale prices: Allow coupons on wholesale prices, Block coupons for wholesale customers, or Apply coupons to the retail price only. This applies to customers in a group.
  • Show tier table on product pages: shows quantity tiers with the active tier highlighted and a hint toward the next tier.
  • Email customers about price changes: when a group price changes, customers in that group who bought the product get one email per product, sent in a batch a few minutes after the change.
  • Price cache lifetime (minutes): how long resolved prices are cached. The cache is cleared when prices, rules, groups or products change. The lifetime also limits how late a scheduled price can start.
  • CSV import row limit: the maximum number of rows per import file.
Mercenza Settings Pricing topic with price source order, base price, coupon policy and cache settings
Coupons with wholesale prices decides how coupons combine with group prices.

#Settings: Catalog

The Catalog topic covers store access, enquiries and the wholesale shop page.

  • Require login to view the store: visitors who are not logged in are sent to the login page, except on the allowed pages.
  • Pages allowed without login: comma separated page ids. The login, registration, privacy and terms pages are always allowed.
  • Enquiry link: where the "Enquire" button points for groups in enquiry catalog mode. When empty, it uses the My Account application page.
  • Wholesale shop page: the id of the page that holds the [mercenza_shop] shortcode. Wholesale members are offered it instead of the retail shop, for example when they return from an empty cart.
  • Hidden product behavior: what happens when a buyer opens a product hidden from them: Not found (404) or Redirect to the shop page.
Mercenza Settings Catalog topic with login requirement, allowed pages, enquiry link, wholesale shop page and hidden product behavior
Wholesale shop page takes the id of the page holding the [mercenza_shop] shortcode.

#Settings: Ordering

The Ordering topic covers the quick order form, barcode lookup, reorders and recurring orders.

  • Quick order rows per page: how many products the quick order table loads at a time (5 to 200).
  • Allow guests to use the quick order form: when off, visitors are asked to log in first.
  • Barcode lookup field: which product field a scanned or typed barcode matches: GTIN, UPC, EAN, or ISBN field, SKU, or GTIN first, then SKU.
  • Show "Add to list" on product pages: logged in buyers can save a product to a shopping list from its page. When off, lists stay available in My Account.
  • Show reorder actions: adds a Reorder button to past orders and a frequently purchased panel to My Account.
  • Recurring order payment: how scheduled orders are paid. Create a pending order and email a payment link creates each due order as pending payment and emails the customer an invoice.
Mercenza Settings Ordering topic with quick order, barcode, shopping list, reorder and recurring payment settings
Barcode lookup field decides which product field a scanned code is matched against.

#Settings: Notifications (in app, Slack and Teams)

The Notifications topic controls in app notifications and messages to Slack and Microsoft Teams.

  • In app notifications: shows a notification bell in My Account and in the admin bar. Store staff receive new registrations, and customers receive updates about their application.
  • Keep notifications for (days): older notifications are deleted by the daily maintenance task (7 to 3650 days).
  • Slack incoming webhook URL and Microsoft Teams incoming webhook URL: paste the URL of an incoming webhook. Both are stored encrypted. The field shows "Enter a value to replace the stored one" and a Show link.
  • Events sent to Slack and Teams: only the selected events are posted. In this edition the event is New B2B registration. Use Select all or Select none.
Channel What you need Where to create it
Slack An incoming webhook URL Create an incoming webhook in Slack and paste its URL
Microsoft Teams An incoming webhook (workflow) URL Create an incoming webhook (workflow) in Teams and paste its URL

Set up a channel

  1. Create the incoming webhook in Slack or Teams and copy its URL.
  2. Paste it in the matching field.
  3. Tick the events to send.
  4. Click Save changes.

Nothing is sent until you add a URL. Each selected event posts a short message with a title, a summary, a few facts (such as the customer or company name) and a link back to your admin. To check the setup, submit a test application on your registration page and confirm the message arrives.

Mercenza also adds webhook topics under WooCommerce > Settings > Advanced > Webhooks, for example registration received, approved or rejected. WooCommerce delivers them to the URL you enter there.

Mercenza Settings Notifications topic with in app toggle, retention, Slack and Teams webhook URL fields and the events list
Only the events ticked under Events sent to Slack and Teams are posted.

#Settings: Security

The Security topic covers rate limits and how visitors are identified.

  • Trust reverse proxy headers: use X-Forwarded-For, CF-Connecting-IP or X-Real-IP to identify visitors for rate limiting and audit entries. Turn it on only behind a trusted proxy, such as Cloudflare or a load balancer, that overwrites these headers on every request.
  • REST list requests per minute: the maximum list requests one user or IP can make to Mercenza REST endpoints per minute.
  • Registration attempts per hour per IP: the maximum B2B registration submissions from one IP address per hour.
  • Log in as customer attempts per hour: the maximum impersonation attempts per admin user per hour.
  • VAT validation calls per hour per IP: the maximum live VAT number checks from one IP address per hour.

Set any limit to 0 to turn it off.

Mercenza Settings Security topic with proxy header toggle and four rate limit fields
Every rate limit can be turned off by setting it to 0.

#Settings: Registration (captcha, VAT checks, emails, uploads)

The Registration topic covers bot protection, email rules, uploads and approval housekeeping for registration forms.

Captcha

Every form already has a honeypot field and a signed timing check (forms sent faster than three seconds or older than a day are refused). CAPTCHA PROVIDER adds a bot check from an outside provider:

Option Keys needed Extra setting
None (honeypot and timing only) None None
Google reCAPTCHA v3 Site key and secret key reCAPTCHA v3 minimum score (0 to 1). Submissions scoring below it are refused
hCaptcha Site key and secret key None
Cloudflare Turnstile Site key and secret key None

To set up a provider:

  1. In the provider's dashboard, create keys for your site.
  2. Choose the provider in CAPTCHA PROVIDER.
  3. Paste the public key in Captcha site key and the private key in Captcha secret key. The secret key is stored encrypted and never shown again after saving.
  4. For reCAPTCHA v3, adjust reCAPTCHA v3 minimum score if needed.
  5. Click Save changes, then submit a test application on your registration page.

The provider's script only loads when a provider is selected. On submit, the visitor's captcha response, IP address and your site address are sent to the provider for verification.

VAT numbers

Check VAT numbers online is off by default. When on, an EU VAT number is checked with the European Commission's VIES service and a UK number (starting with GB) with HMRC's "Check a UK VAT number" API. The check runs when the applicant pauses typing and again on submit, the result (valid, invalid or unknown) is stored with the application, and a valid result is cached for a day. When off, nothing leaves your site and VAT numbers are reviewed manually. Numbers from Australia, New Zealand, the United States, India and Canada are checked for the right format on your own site.

Email rules

  • Block disposable email domains: refuses registrations from known throwaway email providers. Individual forms can allow them.
  • Additional blocked domains: one domain per line, added to the bundled list.
  • Always allowed domains: one domain per line. Overrides the block list.

Uploads

  • Maximum upload size (MB): applies to registration documents unless a field sets its own limit.
  • Allowed upload extensions: comma separated. Executable and script types are never allowed. Files are stored in a protected folder under random names, and only the owner or staff who can approve registrations can download them.

Approval housekeeping

  • Delete rejected accounts after (days): accounts created by a rejected application are removed after this period unless approved later or they placed an order. 0 keeps them.
  • Block login until approved (default): the default for forms that do not set their own login gate.
  • Rejection reason templates: one reason per line, offered when you decline an application.
Mercenza Settings Registration topic with captcha provider and keys, VAT check, disposable email, upload and rejection settings
Captcha site key and secret key are used by whichever provider you select.

#Tools: diagnostics

Mercenza > Settings > Tools holds health checks, CSV import and export, migration from other wholesale plugins and settings transfer.

The Diagnostics tab shows:

  • Self diagnostics: database schema, custom tables, Action Scheduler, object cache, conflicting plugins, capabilities, encryption key, template overrides and pricing integrity (recent orders with a price snapshot compared with their stored totals).
  • Actions: Run pending migrations (with the current schema version), Flush Mercenza caches (clears cached settings, groups, prices and catalog visibility) and Sync capabilities (re-adds every Mercenza capability to Administrator and Shop Manager).
  • Environment: Mercenza, PHP, WordPress and WooCommerce versions, HPOS status, object cache, next maintenance run and encryption key id.
  • Tables: every Mercenza table with its row count.
Mercenza Tools Diagnostics tab with self diagnostics, actions, environment and tables panels
Use Flush Mercenza caches after large manual changes if a price or visibility looks stale.

#Tools: import

The Import tab imports CSV files. Choose WHAT TO IMPORT: Customers with group, Companies, Sub accounts, Registration submissions, Pricing rules, Group prices, Customer prices or Tiered prices. The columns for the chosen type are listed under the selector (fields marked with * are required).

  1. Choose the file and click Upload and map columns.
  2. Map the file's columns to the importer's columns. Headers that match are mapped for you.
  3. Run a dry run to validate every row and download the error report.
  4. Start the import. It runs in the background in chunks of 100 rows, survives timeouts and resumes from the last processed row.

Groups can be referenced by slug, name or id, customers and owners by email, and products by SKU or id.

Import CSV panel with What to import selector, column list and Upload and map columns button
The expected columns change with the record type you choose.

#Tools: export

The Export tab downloads the same record types as the importer: choose WHAT TO EXPORT (customers, companies, sub accounts, registrations, pricing rules, group prices, customer prices or tiers) and click Download. Files use the columns the importer accepts, so a file exported on one site can be imported on another.

The WooCommerce product exporter and importer also gain columns for Mercenza group prices, tiers and the minimum, maximum, step and pack size quantity rules.

Export panel with What to export selector and Download button
Exported files can be imported again on another site.

#Tools: migrate from another wholesale plugin

The Migrate tab detects data from B2BKing, Wholesale Suite, WholesaleX and Whols. The Detected column shows whether data was found.

  1. Click Preview to see what would move (groups, customers and prices).
  2. Click Migrate. A rollback point is created first, and groups, customer assignments and fixed product prices are migrated.
  3. If needed, restore a rollback point from the Rollback points panel.

Tiers and dynamic rules of other plugins are not migrated. Recreate them under Mercenza > Pricing.

Migrate tab listing B2BKing, Wholesale Suite, WholesaleX and Whols with Preview and Migrate links, and a Rollback points panel
A rollback point is created before every migration.

#Tools: settings transfer

The Settings transfer tab exports every setting except secrets as signed JSON.

  • Export: optionally enter a PASSPHRASE (OPTIONAL) and click Download settings JSON. Without a passphrase the file can only be restored on the same site. With a passphrase it can move between sites.
  • Import: enter the same passphrase, paste the file content into PASTE A SETTINGS JSON DOCUMENT TO IMPORT and click Import settings.

Imports are refused when the signature does not match, when the plugin or format differs, or when the file was made by a newer Mercenza. Keys that fail validation on the target site are skipped and reported. Secrets such as captcha and webhook keys are not included, so enter them again on the new site.

Settings transfer panel with passphrase field, Download settings JSON button, import text area and Import settings button
Use a passphrase when moving settings to another site.

#Audit log

Mercenza > Settings > Audit Log records who changed what and when: approvals, prices, settings and log in as customer sessions. The log is append only.

Filter by EVENT (for example registration.approved, price.set or settings.updated), SEARCH, CHANGED BY, FROM (UTC) and TO (UTC), then click Filter. Click "field(s) changed" in the Changes column to see a diff. Export CSV downloads the filtered entries. Entries older than Audit log retention (days) are deleted automatically.

Mercenza Audit Log with filters and a table of events, objects, actors and changes
Each entry shows the actor, their IP address and a link to the changed fields.

#Built in help

Mercenza > Help holds the complete documentation inside WordPress. Use FIND A TOPIC to search, and each guide has its own table of contents. Topics include Getting Started, Groups, Customers, and Companies, Registration, Pricing Engine, Catalog and Ordering Rules, Bulk Ordering, Lists, Reorders, and Recurring Orders, Emails, Notifications, and Webhooks, Import, Export, Migration, and Tools, Templates, WP-CLI Commands and the REST API.

Every screen also has a Guide for this screen link and a Help tab in the top right corner, and every setting has a Learn more link that opens the matching guide.

Mercenza Help screen with a topic list on the left and the Getting Started guide on the right
Every guide opens with an On this page list of its sections.

#Emails

Every Mercenza email is a WooCommerce email. Find them under WooCommerce > Settings > Emails with names starting with "Mercenza:". They cover: registration received, new application (for the store team), registration approved, registration rejected, account already exists, onboarding steps, group changed, sub account invited, sub account permissions changed, and price change.

Each email has the standard fields: Enable/Disable, Subject, Email heading, Additional content, Email type (Plain text, HTML or Multipart), Cc(s) and Bcc(s). The Email preview shows the email, and Send a test email sends it to you.

  • Mercenza: application received is sent to the customer when a wholesale application is received and waits for review.
  • Mercenza: sub account invited is sent when a company invites someone to join as a sub account. It contains an Accept invitation button and the link's expiry date.

When someone registers with an email that already has an account, they see the same success message as a new applicant, and the account holder receives the "account already exists" email instead. To change the layout, copy the template files to yourtheme/mercenza/emails/.

WooCommerce email settings for Mercenza: application received with a preview of the email
The default subject and heading are shown as placeholders until you type your own.
WooCommerce email settings for Mercenza: sub account invited with a preview containing an Accept invitation button
The invitation email includes an Accept invitation button.

#Quick order form

The quick order form lets buyers add many products at once. Place [mercenza_quick_order] or the Mercenza Quick Order block on a page. It is also available under My Account > B2B > Quick order.

  • The table lists only products the buyer may see, with their price, stock text and quantity rules. Variations appear on their own rows.
  • Buyers search by name or SKU, filter by category, type quantities and click Add all to cart. Hidden, unavailable and off rule quantities are refused with the same messages as the product page.
  • SKU quick entry: paste lines like ABC-123, 12 (comma, semicolon, tab or space separated, up to 500 lines) or upload a CSV. Duplicate SKUs are merged and unknown SKUs are reported.
  • Barcode: on browsers that support it, "Start camera" scans with the device camera. Other browsers get a plain code input. Settings > Ordering decides which product field the code matches.
  • Save quantities to a list saves the entered quantities to a shopping list.

Guests can use the form only when Allow guests to use the quick order form is on. On phones, rows collapse into a two column grid.

Quick order page with a search box, category filters and a table of products with SKU, price, stock and quantity
Variations get their own row with their own wholesale price.

#Wholesale shop page

The [mercenza_shop] shortcode shows a separate wholesale shop: the products the buyer may see, category links, the buyer's prices and pagination.

  1. Create a page, for example "Wholesale shop", and add [mercenza_shop].
  2. Publish it and note its page id.
  3. Enter the id in Settings > Catalog > Wholesale shop page and save.

Wholesale members are then offered this page instead of the retail shop, for example when they return from an empty cart.

Wholesale shop page with category links and a grid of products showing SKUs and wholesale prices
Category links at the top filter the wholesale shop.

#B2B area in My Account

Approved buyers get a B2B tab in My Account (the label comes from B2B area label). It follows your theme and has four parts: Overview, Shop, Company and Account.

  • Overview: a welcome with the buyer's group, company and role, plus counts of items in the cart, shopping lists and unread notifications. A "Frequently purchased" panel appears when reorder actions are on.
  • Shop: My products (products with a price negotiated for the account), Quick order, Shopping lists and Recurring orders.
  • Company: Company (profile and address book) and Sub accounts (invite colleagues and choose what each can do).
  • Account: Notifications and Application (the wholesale application and its status).

Shopping lists can be private or shared with the company. A list goes into the cart in one click. Recurring orders (for groups with Allow recurring orders) schedule repeat orders from a list weekly, every two weeks, monthly or every N days. The daily maintenance task creates each due order at the customer's current prices, sets it to pending payment and emails the invoice. Schedules can be paused, resumed or deleted.

To change the look, copy any file from the plugin's templates folder to yourtheme/mercenza/ and edit the copy.

My Account B2B overview with welcome, stats and links to My products, Quick order, Shopping lists, Recurring orders, Company, Sub accounts, Notifications and Application
The overview shows the buyer's group, company and role at the top.

Settings reference

Mercenza > Settings > General

SettingTypeDefaultWhat it does
B2B area label text B2B Name shown for the wholesale area in My Account and in the admin menu badges.
Keep data on uninstall checkbox on When enabled, deleting the plugin keeps its tables, settings and customer data so it can be reinstalled later.
Developer mode checkbox off Writes detailed logs with a request id to WooCommerce > Status > Logs under the "mercenza" source. Turn off on production stores.
Audit log retention (days) number 365 Audit entries older than this are deleted by the daily maintenance task. Between 30 and 3650 days.

Mercenza > Settings > Pricing

SettingTypeDefaultWhat it does
Price source order text customer, company, group, group_discount, category, global, regular Comma separated, highest priority first. Unknown entries are ignored and missing ones are added at the end.
BASE PRICE FOR DISCOUNTS select Regular price Whether percentage and fixed discounts start from the regular price or from an active sale price (Sale price when set).
COUPONS WITH WHOLESALE PRICES select Allow coupons on wholesale prices Allow coupons on wholesale prices, Block coupons for wholesale customers, or Apply coupons to the retail price only. Applies to customers in a group.
Show tier table on product pages checkbox on Lists quantity tiers with the active tier highlighted and a nudge toward the next tier.
Email customers about price changes checkbox off When a group price changes, customers in that group who bought the product receive one email per product, batched a few minutes after the change.
Price cache lifetime (minutes) number 10 How long resolved prices are cached per product (1 to 1440). The cache is cleared when prices, rules, groups or products change.
CSV import row limit number 50000 Maximum rows accepted per import file.

Mercenza > Settings > Catalog

SettingTypeDefaultWhat it does
Require login to view the store checkbox off Visitors who are not logged in are sent to the login page except on the allowed pages.
Pages allowed without login text - Comma separated page ids. The login, registration, privacy and terms pages are always allowed.
Enquiry link url - Where the "Enquire" button points for groups in enquiry catalog mode. Empty uses the My Account application page.
Wholesale shop page number 0 Id of the page holding the [mercenza_shop] shortcode. Wholesale members are offered it instead of the retail shop.
HIDDEN PRODUCT BEHAVIOR select Not found (404) What happens when a buyer opens a product hidden from them: Not found (404) or Redirect to the shop page.

Mercenza > Settings > Ordering

SettingTypeDefaultWhat it does
Quick order rows per page number 25 How many products the quick order table loads at a time (5 to 200).
Allow guests to use the quick order form checkbox off When off, visitors are asked to log in first.
BARCODE LOOKUP FIELD select GTIN, UPC, EAN, or ISBN field Which product field a scanned or typed barcode matches: GTIN, UPC, EAN, or ISBN field, SKU, or GTIN first, then SKU.
Show "Add to list" on product pages checkbox on Logged in buyers can save a product to a shopping list from its page. Lists stay available in My Account when off.
Show reorder actions checkbox on Adds a Reorder button to past orders and a frequently purchased panel to My Account.
RECURRING ORDER PAYMENT select Create a pending order and email a payment link How scheduled orders are paid.

Mercenza > Settings > Notifications

SettingTypeDefaultWhat it does
In app notifications checkbox on Show a notification bell in My Account and in the admin bar.
Keep notifications for (days) number 90 Older notifications are deleted by the daily maintenance pass (7 to 3650 days).
Slack incoming webhook URL password - Create an incoming webhook in Slack and paste its URL. Stored encrypted.
Microsoft Teams incoming webhook URL password - Create an incoming webhook (workflow) in Teams and paste its URL. Stored encrypted.
New B2B registration checkbox on Under Events sent to Slack and Teams. Only the selected events are posted to the channels.

Mercenza > Settings > Security

SettingTypeDefaultWhat it does
Trust reverse proxy headers checkbox off Use X-Forwarded-For, CF-Connecting-IP or X-Real-IP to identify visitors. Enable only behind a trusted proxy that overwrites these headers on every request.
REST list requests per minute number 120 Maximum list requests one user or IP may make to Mercenza REST endpoints per minute. 0 disables the limit.
Registration attempts per hour per IP number 10 Maximum B2B registration submissions from one IP address per hour. 0 disables the limit.
Log in as customer attempts per hour number 30 Maximum impersonation attempts per admin user per hour. 0 disables the limit.
VAT validation calls per hour per IP number 30 Maximum live VAT number validation calls from one IP address per hour. 0 disables the limit.

Mercenza > Settings > Registration

SettingTypeDefaultWhat it does
CAPTCHA PROVIDER select None (honeypot and timing only) Adds a bot check to registration forms: None (honeypot and timing only), Google reCAPTCHA v3, hCaptcha or Cloudflare Turnstile.
Captcha site key text - Public key from the provider dashboard.
Captcha secret key password - Stored encrypted. Never shown again after saving.
reCAPTCHA v3 minimum score number 0.5 Between 0 and 1. Submissions scoring below this are refused. Used with Google reCAPTCHA v3.
Check VAT numbers online checkbox off Sends the country code and VAT number to VIES (EU) or HMRC (UK) to confirm it is registered. When off, nothing leaves your site.
Block disposable email domains checkbox on Refuses registrations from known throwaway email providers. Individual forms can allow them.
Additional blocked domains textarea - One domain per line, added to the bundled list.
Always allowed domains textarea - One domain per line. Overrides the block list.
Maximum upload size (MB) number 10 Applies to registration documents unless a field sets its own limit.
Allowed upload extensions text pdf,jpg,jpeg,png,doc,docx Comma separated. Executable and script types are never allowed.
Delete rejected accounts after (days) number 30 Accounts created by a rejected application are removed after this period unless approved later or they placed an order. 0 keeps them.
Block login until approved (default) checkbox off Default for forms that do not set their own login gate.
Rejection reason templates textarea We could not verify your business details. We do not currently serve your region. Your business type does not match our wholesale program. One reason per line, offered when declining an application.

Mercenza > Pricing > Bulk editor (Apply to every product on this page)

SettingTypeDefaultWhat it does
GROUP select - The group whose prices you change.
SET AS select - Price, % off retail or Amount off retail.
PERCENT text - Shows when SET AS is % off retail. The percentage taken off each retail price.
AMOUNT text - Shows when SET AS is Price (the fixed price) or Amount off retail (the amount taken off each retail price).

WooCommerce > Settings > Emails > Mercenza: application received

SettingTypeDefaultWhat it does
Enable/Disable checkbox on Sends this email to the customer when a wholesale application is received and waits for review.
Subject text - Leave empty to use "We received your application on {site_title}".
Email heading text - Leave empty to use "Application received".
Additional content textarea - Text shown below the main email content.
Email type select HTML Plain text, HTML or Multipart.
Cc(s) text - Extra recipients in copy.
Bcc(s) text - Extra recipients in blind copy.

WooCommerce > Settings > Emails > Mercenza: sub account invited

SettingTypeDefaultWhat it does
Enable/Disable checkbox on Sends this email when a company invites someone to join as a sub account.
Subject text - Leave empty to use "You have been invited to join {company_name} on {site_title}".
Email heading text - Leave empty to use "Join {company_name}".
Additional content textarea - Text shown below the main email content.
Email type select HTML Plain text, HTML or Multipart.
Cc(s) text - Extra recipients in copy.
Bcc(s) text - Extra recipients in blind copy.

Shortcodes

[mercenza_registration_form]

Shows a registration (trade account application) form. Logged in customers who already have an application see its status instead. You can also use the Mercenza Registration Form block.

[mercenza_registration_form form="wholesale-application"]
AttributeDefaultDescription
formThe slug of the form from Mercenza > Customers > Forms. When empty or not found, the first active B2B form is used.

[mercenza_quick_order]

Shows the quick order table where buyers add many products at once by name, SKU, barcode or a pasted list. You can also use the Mercenza Quick Order block.

[mercenza_quick_order categories="stationery" columns="sku,name,price,stock,quantity,subtotal" barcode="no"]
AttributeDefaultDescription
productsComma separated product ids to limit the table to.
categoriesA category slug to lock the table to. Otherwise category tabs appear.
columnsimage,sku,name,price,stock,quantity,subtotalColumns to show, any of image, sku, name, price, stock, quantity, subtotal.
layouttabletable or compact.
per_page0Rows per page.
sku_entryyesShow the SKU quick entry box: yes or no.
barcodeyesShow barcode entry: yes or no.

[mercenza_shop]

Shows the wholesale shop: visible products with category links, the buyer's prices and pagination. Set the page in Settings > Catalog > Wholesale shop page.

[mercenza_shop per_page="12" columns="3"]
AttributeDefaultDescription
categoryA category slug to start on.
per_page24Products per page.
columns4Number of columns.

On your site

Shoppers who are not in a group see your normal store. Approved wholesale buyers see their own prices everywhere: in the shop, on product pages, in the cart and at checkout.

  • Shop and product pages: depending on the group's Price display, buyers see the wholesale price only, the retail price struck through, a savings percentage (for example "Save 25%"), "Login to see prices", or no price. A Price suffix such as "ex VAT" can follow the price.
  • Volume pricing: product pages with quantity tiers show a table of quantities and unit prices, with a hint such as "Buy 9 more to save" that follows the quantity.
  • Add to list: logged in buyers can save a product to a shopping list.
  • Wholesale info: products with lead time, case dimensions and weight, HS code, country of origin or custom fields show a Wholesale info tab.
  • Packs and limits: products with a pack size show "Sold in packs of X (price per pack)". Minimums, maximums and steps are checked in the cart.
  • Catalog modes: groups in hide cart or enquiry mode cannot add to cart (enquiry mode shows an "Enquire" button), and read only groups are sent back from the cart and checkout.
  • Trade account application: the registration form collects the details you configure, for example name, company, business type, VAT number (with the two letter country code), business address and a consent checkbox. After submitting, the applicant sees a confirmation and can follow the status in My Account.
Product page showing the retail price struck through, the wholesale price with Save 25%, a Volume pricing table and an Add to list button
The Volume pricing table and the "buy more" hint come from quantity tiers.
Shop page showing wholesale prices with struck through retail prices and ex. VAT suffixes
Wholesale buyers see their prices in the regular shop too.
Open a trade account page with the wholesale application form and an Apply for a wholesale account button
The default Wholesale application form placed on a page.

Frequently asked questions

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 (Mercenza audience). You can also add visibility rules under Mercenza > Pricing > Catalog. Wholesale only products disappear from the shop, search, feeds and the API for everyone else, and their links return a 404 (or redirect to the shop, if you choose that in Settings > Catalog).

Which price wins when a customer is in two groups or has several prices?

The most specific one: a price for that customer beats a company price, which beats a group price, and a nearer group beats a parent group. You can change the order in Settings > Pricing > Price source order. The 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 variations get their own rows in the bulk editor and the quick order form.

Can I import existing wholesale prices or move from another wholesale plugin?

Yes. Mercenza > Settings > Tools > Import 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. Tools > Migrate moves groups, customer assignments and fixed product prices from B2BKing, Wholesale Suite, WholesaleX and Whols, with a rollback point. Tiers and dynamic rules from other plugins are not migrated.

Which captcha services can I use on the registration form?

Google reCAPTCHA v3, hCaptcha and Cloudflare Turnstile. Each needs a site key and a secret key from the provider's dashboard, entered under Settings > Registration. Without a provider, forms are still protected by a honeypot field and a timing check.

Are VAT numbers checked automatically?

Only if you turn on Settings > Registration > Check VAT numbers online. EU numbers are then checked with the European Commission's VIES service and UK numbers with HMRC, and the result is stored with the application. When the setting is off, nothing is sent and you review VAT numbers manually. Numbers from Australia, New Zealand, the United States, India and Canada are checked for the right format on your own site.

Does Mercenza send data to outside services?

Only for features you turn on: online VAT checks (VIES and HMRC), a captcha provider, and Slack or Microsoft Teams webhooks. Each is off until you set it up, and no usage data is collected.

Can buyers order by SKU or barcode?

Yes. The quick order form accepts a search by name or SKU, a pasted list of SKU, quantity lines (up to 500) or a CSV, and barcodes typed in or scanned with the device camera on browsers that support it.

Is it compatible with High-Performance Order Storage and the block checkout?

Yes. Mercenza works with HPOS (custom order tables) and with the Cart and Checkout blocks.

How do I change the look of the B2B pages?

Copy any file from the plugin's templates folder to yourtheme/mercenza/ and edit the copy. The Diagnostics tab warns you when an override becomes outdated.

What happens if I install Mercenza Pro later?

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.

Troubleshooting

Activation fails with "Mercenza requires WooCommerce to be installed and active."

Install and activate WooCommerce 8.2 or later first, then activate Mercenza again. Similar messages name other unmet requirements, such as the PHP, WordPress or WooCommerce version, or a missing PHP extension.

Activation fails with "Mercenza requires a unique AUTH_KEY value in wp-config.php. It seeds the key that protects sensitive data."

Your wp-config.php still has placeholder salts. Replace AUTH_KEY and SECURE_AUTH_KEY with unique random values, then activate again. Once Mercenza is in use, changing these keys requires the key rotation command first, as the Encryption key check on the dashboard explains.

The registration page shows "Mercenza: no active registration form found. Create one under Mercenza > Forms."

The shortcode points to a form slug that does not exist, or the form is not active. Open Mercenza > Customers > Forms, check the slug in the Shortcode column and make sure the form is active. Only administrators see this message. Visitors see nothing.

Applicants see "Please use a permanent business email address."

The email domain is on the disposable email list. If the domain is legitimate, add it to Settings > Registration > Always allowed domains, or allow disposable domains on that form. To block more domains, add them to Additional blocked domains.

Applicants see "Too many attempts from your network. Please try again later."

The Registration attempts per hour per IP limit was reached. Raise it under Settings > Security. If your site runs behind Cloudflare or a load balancer, all visitors may appear to share one IP: turn on Trust reverse proxy headers only if the proxy overwrites those headers on every request.

Applicants see "The security check could not be verified. Please try again." or "The security check failed. Please try again."

Check that CAPTCHA PROVIDER matches the keys you entered, and that Captcha site key and Captcha secret key come from the same provider and site. For reCAPTCHA v3, a too high reCAPTCHA v3 minimum score can refuse real people. Try a lower value such as 0.5.

The VAT field says "The VAT validation service is not available right now." or "Live validation is not available for this country. The number will be reviewed manually."

The VIES or HMRC service did not answer, or the country has no live check. The application is still saved and the number is reviewed manually in Mercenza > Customers > Registrations. Also check that Check VAT numbers online is on and that VAT validation calls per hour per IP is not set too low.

The quick order page shows "Please log in to use quick ordering."

Guests cannot use the form by default. Ask buyers to log in, or turn on Settings > Ordering > Allow guests to use the quick order form.

A wholesale buyer sees the retail price or an unexpected price

Open Mercenza > Pricing > Inspector, pick the product and the customer, and click Inspect to see which source and rules produced the price. Check that the customer is in an active group on the Customers screen. If the page is cached by a page cache plugin, exclude logged in users and pages with Mercenza shortcodes from the cache. After large changes, click Flush Mercenza caches under Tools > Diagnostics.

An approved customer cannot log in and sees "Your account is waiting for approval. You will receive an email once it has been reviewed."

The application is still pending and login is blocked until approval, either by the form's own setting or by Block login until approved (default). Approve the application under Mercenza > Customers > Registrations, or change the login setting on the form.

The admin shows "Mercenza Pro is active, so the free Mercenza plugin is not running. Pro uses the same settings and data, so you can deactivate the free plugin on the Plugins screen."

This is expected. Pro replaces the free plugin and keeps your data. Deactivate the free plugin on the Plugins screen.

Free vs Pro

Mercenza Free vs Pro

The free plugin already covers customer groups, wholesale prices and tiers, catalog and quantity rules, trade registration, company accounts and quick ordering. Pro adds quotes, net terms and invoices, company approvals, B2B tax and shipping, sales reps with reports and plugin integrations.

23 of 30 features in Free7 more with Pro

Feature Free Pro
Customers and companies
Customer groups with inheritance and role sync Included Included
Automatic group assignment rules Included Included
Onboarding emails after approval into a group Included Included
Company accounts with member roles and sub accounts Included Included
Log in as a customer to check their view Included Included
Trade registration
Registration form builder with conditions and steps Included Included
Approval queue with bulk approve and reject Included Included
Captcha and disposable email blocking Included Included
Pricing and catalog
Group prices with a bulk price editor Included Included
Quantity tier pricing with product page table Included Included
Dynamic pricing rules such as buy X get Y Included Included
Price inspector showing how a price was calculated Included Included
Hide products and require login to browse Included Included
Minimum, maximum, step and pack size rules Included Included
Ordering
Quick order form by SKU, barcode or pasted list Included Included
Shopping lists and one click reorders Included Included
Recurring orders on a schedule Included Included
Tools and notifications
CSV import, export and migration from other plugins Included Included
Audit log of approvals, prices and settings Included Included
Slack and Microsoft Teams notifications Free posts only the New B2B registration event. Limited Included
Integrations with page builders, currency and translation plugins Not included Included
Quotes, payments, tax and shipping
Quotes with negotiation, counter offers and PDF Not included Included
Net terms, purchase orders, invoices and store credit Not included Included
Tax exemption certificates, VAT checks and reverse charge Free checks VAT numbers on trade applications only. No exemption certificates or reverse charge. Limited Included
Shipping rules, freight and pickup slots Not included Included
Approvals, sales team and reports
Company approvals and spending limits Free has a per member order limit that blocks larger orders. No approval chains or approval thresholds. Limited Included
Sales reps, commissions and B2B reports Free dashboard shows 30 day wholesale revenue and top customers only. No sales reps, commissions or full reports. Limited Included
Buyer price lists in CSV or PDF Not included Included
Dormant account detection and winback emails Not included Included
Import phone and email orders from CSV Not included Included

Try the Pro demo Get Mercenza Pro

Upgrade

Upgrade to Mercenza - B2B for WooCommerce

The free edition is complete and nothing in it is locked. Mercenza - B2B for WooCommerce (Pro) is a separate plugin that uses the same settings and data, and adds these features on top:

  • Quotes with negotiation, counter offers and PDF
  • Net terms, purchase orders, invoices and store credit
  • Company approvals and spending limits
  • Tax exemption certificates, VAT checks and reverse charge
  • Shipping rules, freight and pickup slots
  • Sales reps, commissions and B2B reports

Try the Pro demo Get Pro