Cartnorm B2B is not on WordPress.org yet. These pages describe version 0.3.0, the version that will be published. Pro features are marked as planned.
Turn on “Add to quote”
In WooCommerce › Settings › B2B › Customer groups & rules, choose Request a quote for each group, and for Retail customers and guests:
- Off,
- “Add to quote” button next to “Add to cart”,
- “Add to quote” button instead of “Add to cart”.
Hide prices (optional)
- Per group: Hide prices from this group shows “Price on request”; products can then only be quoted.
- For Retail: Show prices, Hide prices from guests (“Log in to see prices”) or Hide prices from guests and Retail customers.
Customers who cannot see prices cannot add products to the cart either, so turn on “Request a quote” for them. Hidden prices are also removed from the Store API product data used by product blocks (/wc/store/v1/products, including the price filter range) and from the product’s structured data (JSON-LD), so they cannot be read from the page source. Customers who cannot see prices cannot buy through the Store API either.
The quote page
The page with the [cartnorm_b2b_quote] shortcode (created on activation, works in block themes) shows the quote request. Customers change quantities, remove products and send their details: name, company, email, country, VAT ID (prefilled for logged-in customers) and a message. Spam protection: a honeypot field and a rate limit. The same page is where customers accept a quote.
Set the page under WooCommerce › Settings › B2B › Quotes › Quote page.
Answering a quote
- Open WooCommerce › Quotes. Requests have the status New.
- Enter a unit price excluding VAT for each line. The reference price next to it is what this customer would pay in the shop today. Set a quantity to 0 to remove a line.
- Check Valid until (default: 30 days, change it under Quotes are valid for) and add a note to the customer if you like.
- Click Save and send quote. The status changes to Answered and the customer gets an email with a link to accept.
A quote is only sent when every line has a price and the validity date is not in the past. If you send a quote again, earlier links stop working.
Accepting
The customer accepts from a signed link that expires at the end of the validity day. The plugin then:
- creates a WooCommerce order with your prices and the status Pending payment,
- adds VAT with the same rules as the checkout: 0% VAT and the legal note for a valid EU VAT ID from another member state (see EU VAT and VIES),
- sends the customer straight to the pay for order page.
Shipping is not added automatically. If you want to charge it, include it in your quote prices or edit the order before the customer pays. You can also create the order yourself with Create order now on the quote screen.
Statuses
| Status | Meaning |
|---|---|
| New | Request received, waiting for your answer |
| Answered | Prices sent; the customer can accept until the validity date |
| Accepted | The customer accepted |
| Expired | Not accepted before the validity date (set automatically) |
| Converted | An order was created |
Emails
In WooCommerce › Settings › Emails, using your WooCommerce email template and translatable:
- B2B: new quote request (to you),
- B2B: quote answered (to the customer, with your prices and the accept link),
- B2B: quote expired (to the customer).
Planned for Pro
PDF quotes with a payment link and reminders are planned for Cartnorm B2B Pro.
Something unclear or missing? Write to [email protected].