{"id":354498,"date":"2026-08-24T09:17:18","date_gmt":"2026-08-24T09:17:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/quoteguard-hide-prices-request-a-quote-for-woocommerce\/"},"modified":"2026-08-24T09:16:45","modified_gmt":"2026-08-24T09:16:45","slug":"priceveil-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/priceveil-for-woocommerce\/","author":23527105,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.0.4","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"PriceVeil \u2013 Hide Prices & Request a Quote for WooCommerce","header_author":"Eren Labs","header_description":"Leak-tested price hiding for WooCommerce: hides prices across the storefront, Store API, structured data and more, and lets customers request a quote instead of buying.","assets_banners_color":"b8a2f7","last_updated":"2026-08-24 09:16:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/erenlabs.net\/","header_author_uri":"https:\/\/erenlabs.net","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"erenlabs","date":"2026-08-24 09:16:45"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3663001,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3663001,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3663001,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3663001,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"priceveil\/request-form":{"name":"priceveil\/request-form","title":"PriceVeil Quote Form"}},"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3663001,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3663001,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3663001,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3663001,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3663001,"resolution":"5","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"Prices are gone from the product page: \"Price on request\" and a Request a quote button take their place, and Add to cart is removed.","2":"The quote request form opens in a modal \u2014 name, e-mail, quantity, message and any custom fields you add.","3":"Requests land as Quote Request orders in the normal WooCommerce orders screen: HPOS-compatible and excluded from revenue and reports.","4":"Settings: hide prices for everyone or for guests only, switch catalog mode on, and choose the button label and form fields.","5":"Honest coverage reporting \u2014 every surface the plugin protects automatically, and the few you should check yourself."}},"plugin_section":[],"plugin_tags":[10553,65997,13760,13770,51032],"plugin_category":[],"plugin_contributors":[271033],"plugin_business_model":[],"class_list":["post-354498","plugin","type-plugin","status-publish","hentry","plugin_tags-b2b","plugin_tags-catalog-mode","plugin_tags-hide-price","plugin_tags-request-a-quote","plugin_tags-wholesale","plugin_contributors-erenlabs","plugin_committers-erenlabs"],"banners":{"banner":"https:\/\/ps.w.org\/priceveil-for-woocommerce\/assets\/banner-772x250.png?rev=3663001","banner_2x":"https:\/\/ps.w.org\/priceveil-for-woocommerce\/assets\/banner-1544x500.png?rev=3663001","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/priceveil-for-woocommerce\/assets\/icon-128x128.png?rev=3663001","icon_2x":"https:\/\/ps.w.org\/priceveil-for-woocommerce\/assets\/icon-256x256.png?rev=3663001","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/priceveil-for-woocommerce\/assets\/screenshot-1.png?rev=3663001","caption":"Prices are gone from the product page: \"Price on request\" and a Request a quote button take their place, and Add to cart is removed."},{"src":"https:\/\/ps.w.org\/priceveil-for-woocommerce\/assets\/screenshot-2.png?rev=3663001","caption":"The quote request form opens in a modal \u2014 name, e-mail, quantity, message and any custom fields you add."},{"src":"https:\/\/ps.w.org\/priceveil-for-woocommerce\/assets\/screenshot-3.png?rev=3663001","caption":"Requests land as Quote Request orders in the normal WooCommerce orders screen: HPOS-compatible and excluded from revenue and reports."},{"src":"https:\/\/ps.w.org\/priceveil-for-woocommerce\/assets\/screenshot-4.png?rev=3663001","caption":"Settings: hide prices for everyone or for guests only, switch catalog mode on, and choose the button label and form fields."},{"src":"https:\/\/ps.w.org\/priceveil-for-woocommerce\/assets\/screenshot-5.png?rev=3663001","caption":"Honest coverage reporting \u2014 every surface the plugin protects automatically, and the few you should check yourself."}],"raw_content":"<!--section=description-->\n<p>Turn your WooCommerce store into a price-free catalogue: hide every price, replace <strong>Add to cart<\/strong> with a <strong>Request a quote<\/strong> button, and answer each enquiry yourself. Built for B2B, wholesale, made-to-order and dealer stores that publish a catalogue but price every customer individually.<\/p>\n\n<p>PriceVeil hides WooCommerce prices at every surface a price can leak \u2014 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.<\/p>\n\n<p>The approach: <strong>find every surface that leaks a price, close it, and prove it stays closed.<\/strong><\/p>\n\n<h4>What it covers<\/h4>\n\n<ul>\n<li><strong>Storefront<\/strong>: single product, shop loop, related products, grouped products, variable price ranges and the inline variation JSON \u2014 numeric fields included, not just the label.<\/li>\n<li><strong>Store API (block themes)<\/strong>: product prices, <code>price_html<\/code>, the collection price-range aggregation and cart totals are blanked server-side, so client-rendered themes have nothing to show.<\/li>\n<li><strong>Structured data<\/strong>: WooCommerce core JSON-LD offers, plus Rank Math, Yoast SEO, All in One SEO and Schema &amp; Structured Data for WP product schema.<\/li>\n<li><strong>WooCommerce REST API<\/strong> (<code>wc\/v3<\/code>, <code>wc\/v2<\/code>): product and variation price fields, so a read-scoped API key handed to a third-party service reveals nothing.<\/li>\n<li><strong>GraphQL<\/strong> (WPGraphQL \/ WooGraphQL): product price fields blanked at field resolution.<\/li>\n<li><strong>Cart, mini-cart, checkout, emails<\/strong>: classic PHP-rendered price output and quote-order customer emails.<\/li>\n<li><strong>Catalog mode<\/strong>: add-to-cart disappears from classic <em>and<\/em> block templates, and the Store API rejects cart writes \u2014 the API cannot be used as a side door around the missing button.<\/li>\n<\/ul>\n\n<h4>Request a quote<\/h4>\n\n<p>A configurable button and form replace the price on product pages (also available as the <code>[priceveil_form]<\/code> shortcode). Requests arrive as <strong>Quote Request orders<\/strong> in your normal WooCommerce orders screen \u2014 HPOS-compatible, never counted as revenue, never in reports \u2014 and you get an email with one-click reply to the customer.<\/p>\n\n<p>The public form is protected by a nonce, a honeypot and a per-IP rate limit.<\/p>\n\n<h4>Speaks your customers' language<\/h4>\n\n<p>PriceVeil ships in <strong>8 languages<\/strong> \u2014 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.)<\/p>\n\n<h4>Honest coverage reporting<\/h4>\n\n<p>The settings screen shows exactly which surfaces are protected automatically and which you should check once yourself (product feed plugins, custom themes calling <code>get_price()<\/code> directly, edge caches). With WP-CLI you can run <code>wp priceveil selftest<\/code> after every WooCommerce update \u2014 it re-verifies every server-reachable surface and fails loudly on any leak.<\/p>\n\n<h4>Choose your audience<\/h4>\n\n<p>Hide prices for everyone, or for guests only so logged-in customers can see prices and buy normally.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>priceveil-for-woocommerce<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it through the WordPress Plugins screen.<\/li>\n<li>Activate the plugin. WooCommerce must be installed and active.<\/li>\n<li>Prices are hidden immediately. Fine-tune everything under <strong>WooCommerce \u2192 PriceVeil<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"are%20the%20actual%20numbers%20removed%2C%20or%20just%20hidden%20with%20css%3F\"><h3>Are the actual numbers removed, or just hidden with CSS?<\/h3><\/dt>\n<dd><p>Removed server-side. The price fields are blanked before the HTML or JSON leaves your server, so cached pages, API responses and view-source contain no price at all.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20block%20themes%3F\"><h3>Does it work with block themes?<\/h3><\/dt>\n<dd><p>Yes. Block themes render prices from the Store API JSON, and PriceVeil blanks the numeric fields in those responses server-side.<\/p><\/dd>\n<dt id=\"can%20logged-in%20customers%20still%20see%20prices%3F\"><h3>Can logged-in customers still see prices?<\/h3><\/dt>\n<dd><p>Yes \u2014 set \"Hide prices for\" to <em>Guests only<\/em> and logged-in users get the normal store, including purchasing.<\/p><\/dd>\n<dt id=\"where%20do%20quote%20requests%20go%3F\"><h3>Where do quote requests go?<\/h3><\/dt>\n<dd><p>They are created as native WooCommerce orders with a special \"Quote Request\" status: visible in your orders list, excluded from revenue and reports, and announced by email. No extra tables, HPOS-compatible.<\/p><\/dd>\n<dt id=\"do%20quote%20orders%20affect%20my%20revenue%20reports%3F\"><h3>Do quote orders affect my revenue reports?<\/h3><\/dt>\n<dd><p>No. The Quote Request status is excluded from paid statuses and from WooCommerce reports.<\/p><\/dd>\n<dt id=\"what%20is%20not%20covered%20automatically%3F\"><h3>What is NOT covered automatically?<\/h3><\/dt>\n<dd><p>Product feed plugins (they export prices on purpose), custom theme code that calls <code>$product-&gt;get_price()<\/code> directly, and edge caches primed before activation. The settings screen lists these, and <code>wp priceveil selftest<\/code> verifies everything that is reachable server-side.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Tested with WooCommerce 11.<\/li>\n<li>Pro: updated the bundled licensing framework to its latest release.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>The plugin is now called PriceVeil. The text domain, language files and internal identifiers were renamed to match; behaviour and settings are unchanged.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release: leak-tested price hiding across the storefront, Store API, structured data, the WooCommerce REST API and GraphQL; catalog mode; and a request-a-quote flow (nonce, honeypot and per-IP rate limit) that lands as native Quote Request orders excluded from revenue and reports.<\/li>\n<li>Available in 8 languages \u2014 English, Turkish, Spanish, German, French, Italian, Brazilian Portuguese and Arabic (right-to-left) \u2014 chosen automatically from the site\/visitor language, with a per-user language switcher in the admin header and a language switcher on the customer quote page.<\/li>\n<\/ul>\n\n<h4>0.10.2<\/h4>\n\n<ul>\n<li>Pro: the Requests console now spells out that sending a quote e-mails the customer \u2014 a note under the Send button shows the exact address the quote goes to, and the confirmation after sending states that it was e-mailed (with the accept\/decline link) to that address.<\/li>\n<\/ul>\n\n<h4>0.10.1<\/h4>\n\n<ul>\n<li>Pro: preparing a quote in the Requests console no longer reloads the page each time you add or remove a product \u2014 lines are added and removed in place and the live customer preview updates instantly.<\/li>\n<li>Pro: a product you add to a quote now defaults to an \"Optional\" add-on (the customer can choose to add it); switch it to Required or Alternative from the Type column if you prefer.<\/li>\n<\/ul>\n\n<h4>0.10.0<\/h4>\n\n<ul>\n<li>Pro: the multi-product quote list is now a polished slide-in \"quote drawer\". Adding a product slides it in from the side with the collected items \u2014 each with its thumbnail, a quantity stepper and a remove control \u2014 a live count, an empty state, and one clear \"Request a quote for these items\" action. A floating launcher reopens it anytime. It is a progressive enhancement of an in-flow list (usable without JavaScript), is keyboard-accessible (focus trap, Esc, scroll lock) and supports light and dark. Prices stay hidden throughout.<\/li>\n<\/ul>\n\n<h4>0.9.9<\/h4>\n\n<ul>\n<li>Fixed: submitting the \"Request a quote\" form from the product-page modal failed with a generic \"Error\". The form's request was being sent to the wrong URL (a hidden field named \"action\" was shadowing the form's action property in the browser), so no quote was created. Quote requests now submit correctly.<\/li>\n<\/ul>\n\n<h4>0.9.8<\/h4>\n\n<ul>\n<li>Fixed: on variable products in catalog (quote) mode the \"Add to cart\" button could still appear alongside the variations form \u2014 it is now fully removed, matching simple products, so only the quote flow remains.<\/li>\n<li>Pro: the multi-product quote list is now a live mini-cart. Adding or removing a product updates the list and its counter instantly without reloading the page, and the \"Add to quote list\" button shows a running count and a brief confirmation.<\/li>\n<\/ul>\n\n<p>For older releases, see changelog.txt.<\/p>","raw_excerpt":"Hide WooCommerce prices everywhere \u2014 storefront, blocks, REST and schema \u2014 switch on catalog mode and collect quote requests instead.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/354498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=354498"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/erenlabs"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=354498"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=354498"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=354498"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=354498"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=354498"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=354498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}