Direct answer
To hide a WooCommerce price for selected products, keep the real product price stored, replace WooCommerce's catalog price HTML with one escaped plain-text message, mark that product non-purchasable in catalog contexts, and validate direct new add-to-cart requests on the server. Do not blank the database price, rewrite orders, or remove lines already accepted into a cart.
StoreFixKit's Hide Price for Selected Products for WooCommerce follows that boundary. Free selects products individually. Pro reuses one message by category or tag and targets everyone, logged-out visitors, or one customer role.
Hiding a price and deleting a price are not the same job
The stored WooCommerce price may still be needed by administrators, imports, exports, reports, historical orders, integrations, or a later policy change. Deleting or setting it to zero changes business data. Hiding is a presentation and new-purchase eligibility decision.
A reversible helper should leave the product record untouched. When deactivated, WooCommerce's original price HTML and purchasability should return immediately.
WooCommerce's official Hide Add to Cart and Price extension demonstrates the established catalog and inquiry use case. A focused alternative does not need to reproduce every catalog-mode, quote, and button feature to solve one selected-product problem.
Replace the price with a clear message
A blank area can look like a rendering failure. A short message such as Contact us for price, Price available by phone, or Available in store only explains the merchant's policy.
The message should be plain text with a small length bound. Rendering arbitrary HTML, shortcodes, forms, or scripts from a product field would turn a small display rule into a content and security system.
If the message is missing or malformed, a safe default can be used. If the product selection itself cannot be proven, return WooCommerce's original price unchanged.
Hiding the button is not enough
A theme can remove the visible Add to cart button while a direct URL, custom form, AJAX request, or Store API request still attempts a new addition. Server-side validation must refuse the selected product even when the browser interface is bypassed.
The reverse is also true: a custom theme may render a hard-coded button after WooCommerce marks the product non-purchasable. The button can remain visible while the server correctly refuses the request. Support must distinguish visible markup from accepted cart state.
Existing carts need a conservative boundary
If a merchant enables hide-price after a shopper has already added the product, silently removing the line or changing its price can destroy accepted cart state. This release therefore affects catalog display and new additions only.
Cart and checkout retain the existing line, price, and ability to complete. A merchant who needs to invalidate old carts after a pricing-policy change needs a separate workflow with its own notices, timing, and recovery plan.
“Price still visible” reports reveal multiple owners
A public support thread asks why a price remained visible after it was set to hidden. Another request describes the simple need to hide pricing and the add-to-cart option. These reports do not prove one cause, but they show that merchants judge the result across the whole storefront.
A price-like value can be owned by:
- WooCommerce price HTML;
- a theme's custom product field;
- variation JSON or a custom selector;
- product structured data;
- an SEO plugin;
- a product feed;
- a cache or CDN;
- text written manually in the description.
A focused plugin can responsibly control WooCommerce's price HTML and purchasability. It should not claim to erase every price from every feed, cache, search index, or custom template.
Variable products and parent fallback
A variation can have an explicit selection and message. When it does not, the parent product can supply the rule. That gives a merchant one default without requiring every variation to be edited.
Test the selected variation, another variation, the parent archive card, and any custom variation picker used by the theme. A custom frontend that bypasses WooCommerce's normal price and purchasability filters is outside the narrow release boundary.
Audience rules introduce cache responsibility
Pro can apply a shared rule to everyone, logged-out visitors, or one customer role. Role-aware output is easy to understand but must be tested with the site's real cache.
If a CDN serves one logged-out cached page to logged-in customers, a correctly evaluated WordPress rule may not run on every request. Test a private logged-out window, a normal customer, the selected role, and cache purges. Do not promise role-specific display until cache variation is verified.
Use one explicit priority
A bounded precedence avoids surprising merchants:
- an explicit Free product selection wins and uses its own message;
- a Pro exception keeps its normal price unless Free selected it;
- otherwise, a category or tag match applies to the chosen audience;
- an incomplete role choice fails passively and shows the original WooCommerce result.
That is enough for a common catalog need without becoming wholesale pricing, quote management, customer approval, or role-based price calculation.
SEO, schema, and product feeds
Visible catalog HTML is only one publication surface. After hiding a price, inspect the page source, structured-data test, merchant feed, social preview, theme blocks, and cached archive used by the store.
If policy or law requires complete suppression outside WordPress, choose a broader feed and indexing solution. It would be misleading for a small WooCommerce filter plugin to claim that search engines have forgotten an already indexed value.
Safety and resource boundary
The plugin needs no custom table, cron job, telemetry, frontend script, frontend stylesheet, remote request, or customer cookie. It reads already loaded product configuration and returns filtered display or purchasability values.
It must not change:
- the stored regular or sale price;
- stock or backorders;
- existing cart lines;
- checkout totals;
- coupons, tax, or shipping;
- payment methods;
- historical orders;
- refunds or subscriptions.
StoreFixKit's Hide Price documentation contains the exact product field, audience testing, rollback, and uninstall workflow.
Beginner launch checklist
Selected product
Confirm the message replaces the price on the shop archive and product page, and that no normal new-purchase button is offered.
Direct add request
Try a direct add-to-cart URL or request. It should fail without changing the existing cart.
Unselected product
Confirm its price, purchasability, and add-to-cart flow are unchanged.
Existing cart
Add the product before enabling the rule, then enable it. The accepted line should remain usable in cart and checkout.
Variations
Test an explicit variation, parent fallback, and an unaffected sibling variation.
Pro audience
Test logged out, a normal logged-in customer, the selected role, a matching product, and an exception with caches enabled.
External surfaces
Inspect structured data, feeds, custom blocks, and CDN caches. Record which system owns any remaining price.
Rollback
Deactivate Pro and verify explicit Free products remain hidden. Deactivate Free and verify normal WooCommerce prices and purchasability return without editing product data.
Security and support evidence
Only users allowed to edit products should change Free choices, and only users who can manage WooCommerce should save Pro assignments. Product and settings writes require capability checks, nonces, bounded sanitization, and escaped output. WordPress's common plugin issues guide summarizes the review expectations.
Useful support evidence includes the product and variation IDs, theme, cache/CDN, audience, exact URL, WooCommerce and plugin versions, expected result, actual result, page-source clue, and screenshots. Remove customer data, credentials, payment details, and full license keys.
FAQ
Does this erase the product price?
No. The stored WooCommerce price remains unchanged.
Does it remove products already in the cart?
No. It refuses new additions and preserves accepted cart lines.
Can the replacement contain a contact form or button?
No. The field accepts bounded plain text only.
Will it remove prices from Google and every product feed?
No. Those systems may use structured data, feeds, caches, or previously indexed values that this focused catalog filter does not own.
What happens when Pro expires?
Explicit Free product selections continue working. Reusable category, tag, exception, and audience behavior requires an active product-bound license.
Focused plugin
Use the one-job implementation.
Replace the catalog price of selected WooCommerce products with one plain-text message and refuse new online additions without deleting the stored price.