
PriceVeil – Request a Quote, Hide Price & Wholesale Pricing for WooCommerce
by erenlabs
PriceVeil turns a WooCommerce store into a price-free catalogue and puts a
Request a quote button where the price used to be. It is built for B2B
ecommerce, wholesale, made-to-order and dealer stores — the shops that publish a
catalogue but price every customer individually.
The five-minute tour: hiding every price, catalog mode, variable products, the
quote request, and pricing a request into a paid order.
It hides price information at every surface a price can leak — not only the
visible label, but the numeric fields in the Store API JSON that block themes
ship to every visitor, in SEO schema, in feeds and in GraphQL.
The approach: find every surface that leaks a price, close it, and prove it
stays closed.
Wholesale pricing, handled by quote
Wholesale pricing is rarely one number. The trade customer, the distributor and
the walk-in each pay something different, and publishing any of it on a public
product page is the thing most B2B ecommerce stores actually want to avoid.
PriceVeil’s answer is not a second price list. It removes the public number
entirely — a call for price / price on request catalogue — and routes the
customer into a quotation system you answer yourself: they ask, you price it,
they pay. Turn WooCommerce catalog mode on and the button goes with the price: hide add to
cart everywhere, so nobody can buy at a number you never agreed to.
If you would rather keep selling to the public and only hide prices from
strangers, switch to guests-only: a login to see price catalogue where signed-in
customers still see prices and check out normally.
Read the full documentation — setup and
settings, what gets hidden and what you should check yourself, catalog mode, who sees
prices, the quote request form and quote orders, and verifying every surface with WP-CLI.
Feature comparison and pricing: erenlabs.net/plugins/priceveil
What it covers
PriceVeil hides prices on every one of these surfaces:
- Storefront: single product, shop loop, related products, grouped products, variable price ranges and the inline variation JSON — numeric fields included, not just the label.
- Store API (block themes): product prices,
price_html, the collection price-range aggregation and cart totals are blanked server-side, so client-rendered themes have nothing to show. - Structured data: WooCommerce core JSON-LD offers, plus Rank Math, Yoast SEO, All in One SEO and Schema & Structured Data for WP product schema.
- WooCommerce REST API (
wc/v3,wc/v2): product and variation price fields, so a read-scoped API key handed to a third-party service reveals nothing. - GraphQL (WPGraphQL / WooGraphQL): product price fields blanked at field resolution.
- Cart, mini-cart, checkout, emails: classic PHP-rendered price output and quote-order customer emails.
- Catalog mode: hide prices and the add-to-cart button together — it disappears from classic and block templates, and the Store API rejects cart writes — the API cannot be used as a side door around the missing button.
Request a quote
Wherever you hide prices, a configurable button and form replace the price on product pages (also available as the [priceveil_form] shortcode). Requests arrive as Quote Request orders in your normal WooCommerce orders screen — HPOS-compatible, never counted as revenue, never in reports — and you get an email with one-click reply to the customer.
The public form is protected by a nonce, a honeypot and a per-IP rate limit.
Speaks your customers’ language
PriceVeil ships in 8 languages — English, Turkish, Spanish, German, French, Italian, Brazilian Portuguese and Arabic (with right-to-left layout). It follows the site language automatically and falls back to English for anything else, and admins can switch the plugin’s own language from a control in the header without changing the rest of wp-admin. (In PriceVeil Pro, the customer’s quote page also detects each visitor’s own language and offers a switcher on the quote itself.)
Honest coverage reporting
The settings screen shows exactly which surfaces hide prices automatically and which you should check once yourself (product feed plugins, custom themes calling get_price() directly, edge caches). With WP-CLI you can run wp priceveil selftest after every WooCommerce update — it re-verifies every server-reachable surface and fails loudly on any leak.
Choose your audience
Hide prices for everyone, or for guests only so logged-in customers can see prices and buy normally.
Screenshots

Add to cart becomes Request a quote: the price is gone from the product page and a quote button takes its place — hide the price, replace the button, switch on catalog mode, use your own button text.

The quote request form opens in a modal on the product page — name, e-mail, quantity and message; Pro adds your own fields, such as phone, company and VAT number.

Requests land inside WooCommerce as Quote Request orders in the normal orders screen — HPOS-compatible, no extra tables, never counted as revenue or in reports.

The Requests console (Pro): every lead with its product, quantity, message and status — Quote sent, Accepted, Declined — in one place.

Build and send the quote (Pro): price each line yourself, set how long the quote is valid, add a note to the customer, and send it in one click.

The private quote page (Pro): the customer gets an e-mail with a link to their own quote page, where they accept or decline it — an accepted quote becomes a normal order.

Hide prices for guests only: strangers see "Login to see price", signed-in customers see prices and check out normally.