Skip to content

Using the countdown

This walkthrough covers the two ways to drive the countdown and how to add the scarcity message.

Option A — count down your existing sale dates

Section titled “Option A — count down your existing sale dates”

If you already set sale prices in WooCommerce, this needs almost no work:

  1. In WooCommerce → Ticker, set the countdown source to product sale date (or both).
  2. On a product, set Product data → General → Sale price dates → To.

The live countdown appears on that product automatically and stops at the sale end. Every product with a sale end gets its own countdown, with no per-product Ticker setup.

For a single deadline across the whole store (a Black Friday cut-off, a flash sale):

  1. Set the countdown source to global campaign date (or both).
  2. Enter the global campaign end date in Ticker’s settings.

With both, a product’s own sale date takes priority and the global date is the fallback — so a store-wide deadline can apply everywhere while specific products keep their own.

  • Pick a placement — near the add-to-cart form is the most persuasive.
  • Choose a format — full days:hours:minutes:seconds for long windows, compact for short ones.
  • Add a heading (Sale ends in) and an expired message for after it ends.

Turn on the scarcity threshold to show Only N left in stock for products that manage stock and sit at or below your threshold (default 5). It is separate from the countdown, so a product can show urgency from a deadline, from low stock, or from both at once. Products that do not track stock never show it.

  • A product on sale shows a live countdown that ticks down to the sale end.
  • When the sale expires, the clock is replaced by your expired message — never a frozen 00:00:00.
  • A product with no sale and no low stock shows nothing at all.

The end moment is a fixed server timestamp; the browser only formats it, so a shopper with a wrong device clock still sees the correct end. The markup is server-rendered with reserved space, so the numbers fill in without shifting the layout, and there is no jQuery. The timer uses ARIA role="timer" with a polite live region and respects prefers-reduced-motion.