Skip to content

How Hidden Prices Work

Every time a product’s price is about to show, the plugin asks two questions: is this visitor someone prices are hidden from, and does anything hide this product’s price? This page follows that decision in the order the plugin makes it, using the demo store’s five rules as the example.

The demo store’s five rules, in priority order

Nothing happens unless the license is active and Enable Hide Price For Guest is ticked. Without both, every visitor sees every price.

A visitor is either a guest (not logged in) or a user with a role: Customer, Shop manager and so on. The default audience under Configuration → General is Guests (not logged in).

A rule can name its own audience in Hide For. A rule’s audience replaces the default for that rule. It does not add to it. The demo’s sunglasses rule names Guests and Customer, so a signed-in customer sees every price in the shop except that one.

The shop as a signed-in customer: prices showing, because the customer is not in the default audience

A visitor no rule targets never sees a hidden price, and the plugin adds nothing to their pages.

With Apply In set to all countries, this step passes. Set to a list, a visitor outside it (or inside it, for “all countries except”) sees every price, whatever the rules say. Guests are placed by WooCommerce geolocation, customers by their billing country.

Each product has a Guest price visibility field in its Product data → General tab.

  • Always show price shows the price to everyone. Nothing below is checked.
  • Always hide price hides it from the default audience, with the default message and button from the Display tab. Rules and exclusions are not checked.
  • Follow plugin rules (the default) moves on.

On the demo store, Classic Crew Tee is $18, under every rule, and is set to Always hide price.

Exclude Products and Exclude Categories under Configuration → General always show the price. The demo excludes Framed Art Print, so its $45 price shows although the $20 rule would otherwise catch it.

Framed Art Print shows its price because it is excluded

Active rules are tried by Priority, lowest number first. Two rules with the same priority run in the order they were created. A rule is skipped when:

  • it is Inactive,
  • today is before its Start Date or after its End Date,
  • the visitor is not in its audience,
  • the product does not meet its conditions. With All conditions, every condition must hold; with Any condition, one is enough. A rule with no conditions matches every product.

The first rule left decides everything the visitor sees: its message, its button action, its button text and its URL. Any of those it leaves empty comes from the Display tab. Later rules are not looked at.

Take Heavyweight Pullover Hoodie, $45, in Hoodies:

Priority Rule Matches?
1 Sunglasses: trade accounts only No, different product
2 Autumn hoodie launch, until 31 October Yes. “Prices go live on 1 November”, no button
10 Trade catalog: $20 and over Not checked

From 1 November the launch rule has ended, the $20 rule is the first match, and the same hoodie shows the login button instead.

The hoodie under the launch rule: a message and no button

For a product whose price is hidden:

  • The price becomes your message, in the shop, on the product page, in related products and in product blocks.
  • The add to cart button becomes the rule’s button, or nothing.
  • With Block Purchases on, the product cannot be added to the cart by any route, including a direct link.
  • The price is removed from the product’s schema data and from the WooCommerce Store API, if those options are on.

A variable product is decided per variation. Each variation is checked on its own, using its own price and stock, so one colour can show its price while another is hidden. Category, tag and featured come from the parent product.

A variable or grouped product is a parent. Its own price is a range built from its children, so it could name a price a rule hides. When some children are hidden and the parent itself is not, the plugin rebuilds the range from the children the visitor may see:

  • Organic V-Neck Tee has variations at $15 and $20. The $20 rule hides the $20 ones, the parent matches no rule, and the product shows “$15.00”, not “$15.00 – $20.00”.
  • A grouped product shows the range of its open children only.
  • When every child is hidden, the parent shows your message instead of a price.

The same applies in the shop, in the Store API and in the product’s schema data, where the parent’s price offer is removed.