Price on Request for WooCommerce
Hide the price and the Add to cart button on the products you choose, put your own wording where the price was, and let shoppers ask for it instead. The price is taken out of the places it usually leaks from too: shop grids, search results, product blocks, the variation script, structured data and the Store API.

What it does
Taking the text that says $25.00 off a product page is the easy half of hiding a price. The same number is printed in shop grids and search results, read by the product blocks, handed to the script that runs variable products, written into the structured data search engines read, and returned by the Store API that every block on your site asks. A shopper who knows a product's link can also try to add it to a cart without ever seeing the price.
This takes the price and the buy button off the products you choose, puts your own wording in their place, such as Price on request, and lets the shopper ask: a short enquiry form on the product page, or one plain button that opens a link, calls a number or writes an email. It then closes each of those other routes. It was tested on real WooCommerce as a visitor fetching the pages, with order storage on and off, rather than by looking at one page.
You choose who is not shown prices: every product in the shop, only the products you tick on their own screens, whole categories or tags with their sub-categories, visitors who are not logged in, or products that are out of stock. Shop managers see what visitors see unless Pro's preview mode is on, so what you check is what customers get.
The enquiry form asks for a name, an email address, a phone number if the shopper wants to give one, and a message, with the product already filled in, and a consent box the shopper must tick. The wording they agreed to is kept with their enquiry. You are emailed each enquiry, the shopper can be sent a confirmation, and every enquiry is kept on a Price enquiries screen under WooCommerce with a status and private notes your team can see and the shopper cannot. The form carries nothing that can expire inside a cached page, so it works behind a page cache. A hidden trap for robots, a limit on how many enquiries one connection can send in an hour and a cap on the size of every field make misuse harder, and none of them is a promise that no unwanted enquiry gets through. WordPress's own tools for exporting and erasing personal data work with the enquiries, and old enquiries can be deleted after a number of days you choose.
Where a price is hidden, a direct request to buy is refused too. The add to cart link, the AJAX button and the Store API all say no, a hidden product that is already in a cart is taken out of it, and both the classic checkout and the block checkout refuse an order that holds one. Sorting by price and price filters are withheld from anyone who has something hidden.
Pro decides when to hide. Its rules are read from the top and look at the customer's role, country, logged-in state, a product attribute, stock status, cart value or the time, and each rule can bring its own wording and its own button, including one that sends the visitor to log in and brings them back to the product. A list of approved customers is shown prices that stay hidden from everyone else, and an enquiry you set to Approved shows the person who asked the price once they sign in with the email address they used. Pro can switch the price off for one variation of a variable product, lets shop managers see the real prices in preview mode while visitors do not, moves your rules in and out of a spreadsheet as a CSV file, lets you write the enquiry emails in your own words, and sends you a reminder when an enquiry has waited too long.
What it cannot reach, so you know before you rely on it: a theme or plugin that reads a product's stored price itself and prints it somewhere else, an SEO or product-feed plugin that writes its own price tags, and a page cache that kept a page from before you hid the price. Clear your cache after changing a rule. The Store API will still say which products are on sale, though never what they cost. The prices that WooCommerce's management API gives a signed-in shop manager are left alone on purpose, because that is how your own tools read the real prices. If the separate PluginCity Quote List for WooCommerce plugin is active, Pro can show its Request a quote button instead of this form, but that hand-over is a pair of filters that has not yet been tried against a released copy of that plugin. An express payment button that builds its own order without using the cart has not been tried either.
It runs on your own website. Enquiries are kept on your own site, and Pro contacts PluginCity for its licence and its updates, and for nothing else.
If a Pro licence lapses, nothing is deleted and nothing breaks. Your rules, your approved customers and your email wording stay saved and stay on the screen you set them on, where you can read them but not change them, and prices go back to being hidden or shown by the shop's main settings alone. That is the safe way round: a price is never shown that those settings would have hidden. The licence screen lists exactly what is being left as it is, and renewing switches it all back on as you left it.
See it in action
What the plugin does
- Hide every price in the shop with one tick, or only where you choose
- Tick Price on request on a single product from its own screen
- Hide prices for whole categories or tags, sub-categories included
- Hide prices from visitors who are not logged in
- Hide the price of products that are out of stock
- Your own wording where the price was, such as "Price on request"
- An enquiry form with name, email, phone and message, and the product already filled in
- A consent box the shopper must tick, with the wording they agreed to kept with the enquiry
- A hidden trap for robots, a limit on how many enquiries one connection, or one email address, can send in an hour, and a cap on the size of every field
- Or a plain button that opens a link, calls a number or writes an email
- An enquiries screen with statuses and private notes
- An email to you for each enquiry and, if you want one, a confirmation to the shopper
- Works with WordPress's tools to export and erase personal data, and deletes old enquiries after the days you choose
- The price taken out of product pages, shop grids, search results, related products, product blocks and shortcodes
- No sale badge or sale price for a hidden product
- Variation prices taken out of the data the product page script reads
- Structured data without an offer or a price
- Store API responses with the price taken out, so the blocks and anyone else asking get none
- Sorting by price, price filters and the price slider of WooCommerce's Product Filters withheld from anyone who has something hidden
- A direct request to buy a hidden product is refused: the add to cart link, AJAX and the Store API
- A hidden product already in a cart is taken out of it
- Both checkouts, classic and block, refuse an order that holds one
- A [porwc_enquiry] shortcode to print the form anywhere
- Settings import and export, so a configuration can be copied to another shop or kept as a backup
- High-Performance Order Storage compatible, and the Cart and Checkout blocks declared compatible
- Does not reach a stored price that a theme or plugin prints itself, the price tags an SEO or product-feed plugin writes, or a page a cache kept from before you hid the price
- Rules for who sees prices, read from the top: by customer role, country, logged-in state, product attribute, stock status, cart value or time
- Wording and a button of its own on each rule
- A list of approved customers who are shown prices that stay hidden from everyone else
- Approve an enquiry and the person who asked is emailed a link, and the account that opens it while signed in sees the price, for that product or for every product
- A button that sends visitors to log in and brings them back to the product
- The price switched off for one variation of a variable product
- Preview mode, so shop managers see the real prices while visitors do not
- Rules downloaded and uploaded as a CSV file
- The enquiry emails written in your own words, with placeholders for the shopper and the product
- A reminder email when an enquiry has waited too long
- The Request a quote button from PluginCity Quote List for WooCommerce instead of this plugin's own form when that plugin is active, through a pair of filters not yet tried against a released copy of it
- Your rules and Pro settings travel with an export
- A lapsed licence deletes nothing: rules, approved customers and email wording stay on screen to read and cannot be changed until you renew, and prices follow the main settings alone
Pricing
Every Pro plan is the same plugin with every feature. The only difference is how many sites you can run it on.
Single site
One site, with a year of updates and support.
$49/year
Secure checkout. Cancel any time.
5 sites
Most popularUp to 5 sites, with a year of updates and support.
$99/year
Secure checkout. Cancel any time.
25 sites
Up to 25 sites, with a year of updates and support.
$199/year
Secure checkout. Cancel any time.
Need more than 25 sites? Get in touch about a custom licence.
Frequently asked questions
Does it hide the price everywhere, or only on the product page?
Everywhere WooCommerce prints it: product pages, shop and category grids, search results, related products and upsells, the Product Collection and Product Price blocks, shortcodes, the variation script, the structured data, and the Store API responses the blocks read. Each was checked on real WooCommerce as a visitor.
What can it not reach?
A theme or plugin that reads a product's stored price itself and prints it somewhere else, an SEO or product-feed plugin that writes its own price tags, and a page cache that kept a page from before you hid the price or changed a rule. Clear your cache after changing a rule. The prices the shop's own tools read through WooCommerce's management API are left alone, because that needs a signed-in shop manager. An express payment button that builds its own order without using the cart has not been tried.
Can someone still buy a hidden product with a link or a script?
Not by any route it closes. The add to cart link, the AJAX button, the Store API and a batched request are all refused, a hidden product already in a cart is taken out, and both checkouts refuse an order that holds one. What it cannot reach is listed in the answer above.
Do shop managers see the prices?
Not on the storefront, unless preview mode is on. Without it everyone sees what visitors see, so that what you check is what customers get. Pro's preview mode shows shop managers and administrators the real prices, with an item on the admin bar to switch to what a visitor sees.
Can wholesale customers see prices while the public cannot?
Yes. Hide prices from everyone with the main setting, then add a rule at the top that shows prices to the wholesale role, or to your approved customers list.
What decides when two rules disagree?
Their order. The first rule that fits the visitor and the product decides, and nothing after it is read. If no rule fits, the main settings decide.
How does the country condition work?
It uses the country on the customer's billing address, or their shipping address if there is no billing one, as WooCommerce holds it. A visitor whose country WooCommerce does not know matches no country, so a rule that names countries does not apply to them. A visitor can type their own country into the shipping calculator, so treat a country rule as a convenience for honest shoppers, not as a lock.
Does a cart-value rule work for a visitor with an empty cart?
A visitor with no cart does not satisfy a rule about the cart value.
When an enquiry is approved, does the shopper need to log in?
Yes. The shopper is emailed a link at the address they typed, and opens it while signed in to their account (or signs in or registers first and opens it again). The first account to open it is the account that then sees the price, and approving the enquiry again sends a fresh link. You choose whether the approval opens that product only, or every product. Because the link goes only to the address typed in the form, nobody can take an approval by registering with someone else's email address, which WooCommerce does not stop.
Can I hide one variation only?
Yes. Each variation has its own tick. A variation that is hidden is left out of the price range, cannot be bought, and shows your wording.
Does it build quotes?
No. This plugin hides prices and takes the enquiry. Building a quote, with a basket and prices in it, belongs to the separate PluginCity Quote List for WooCommerce plugin.
What if I also run PluginCity Quote List for WooCommerce?
When it is active and offers its button for a product, that button replaces this plugin's own form. Nothing depends on it: without it the form carries on as before. The hand-over is a pair of filters that the PluginCity Quote List for WooCommerce plugin answers, and it has not yet been tried against a released copy of that plugin.
Does the form work with a page cache?
Yes. It carries no nonce that could expire inside a cached page. It is protected by a hidden trap for robots, a limit on how many one connection or one email address can send, and a cap on the size of every field. A site behind a proxy should make sure the visitor's real address is passed on, or visitors are counted together.
Where are enquiries kept, and does anything leave my site?
On your own site, on the Price enquiries screen under WooCommerce, and emailed from your own site. Pro contacts PluginCity for its licence and its updates, and for nothing else.
Does it work with High-Performance Order Storage and the block checkout?
Yes. Both are declared, and the plugin was tested with order storage on and off.
Is Pro the whole plugin, or an add-on?
The whole plugin. There is nothing else to install alongside it.
Does it need a licence key?
Pro needs a licence key for its updates and to keep its own settings editable. Without a current key the main settings still hide prices and take enquiries, and what stops being read is Pro's rules, approved customers and email wording.
What happens if my Pro licence lapses?
Nothing is deleted and nothing breaks. Your rules, your approved customers and your email wording stay saved and stay on the screen you set them on, where you can read them but not change them, and prices go back to being hidden or shown by the main settings alone. That is the safe way round: a price is never shown that those settings would have hidden. Renewing switches it all back on as you left it.
Where do updates come from?
From your PluginCity account, onto your Plugins screen like any other update. The licence key is what entitles the site to them.
What happens if I deactivate WooCommerce?
The plugin steps aside and shows a notice. It does not fatally error, and your settings are waiting when WooCommerce comes back.
More plugins

Estimated Delivery Dates for WooCommerce
Tell customers when their order will arrive, and your team when it has to leave. Estimates on the product page, cart, checkout and emails.

Free Shipping Bar for WooCommerce
Show customers how close they are to free shipping, with a progress bar on the cart, at checkout and in the mini-cart.

Delivery Instructions for WooCommerce
Gives customers one clear box at checkout for delivery or shipping instructions, on the classic checkout and the Checkout block, and shows what they wrote on the order and in your emails.