
Some things should not be sold after a certain date: food has a best-before date, a licence or a warranty covers a fixed period, and an event ticket is worthless the morning after. WooCommerce has no way to say so.
PluginCity Product Expiry Dates for WooCommerce adds an Expiry tab to every product with one box on it: the date it can no longer be sold after. When that moment passes the product comes off sale on its own, and a cart that already held it cannot be checked out.
What you get
- One expiry date per product, on an Expiry tab just below Inventory
- An Expires column on the products list, showing what has stopped selling
- The product taken off sale once the date passes, with a sentence on the page saying why
- Carts that outlived the date refused at the checkout, naming the product to remove
- Notices on the cart, checkout and mini-cart, in the classic checkout and the blocks
- PayPal express buttons refused too, so a one-tap order cannot get past the date
- A shortcode,
[pexp_message], to put the cart message anywhere, or a product’s own date with[pexp_message show="product"] - Settings import and export, to copy a configuration to another shop or keep a backup
- High-Performance Order Storage compatibility
The free version is permanent. It does not expire, needs no licence key, and never contacts PluginCity.
Pro
Not every product goes off all at once, and not everyone who buys from you is a retail customer. Pro is for shops that need the exceptions: trade accounts that may still buy cleared stock, a shelf life that dates products for you, dates per variation and in bulk, a warning before a date passes, an automatic markdown as it approaches, and a block and an Elementor widget for the expiry display.
Pro is a separate paid version, sold and distributed by PluginCity. It is not included in this plugin and is not downloaded or installed by it, and nothing described above depends on it. Your dates and settings carry over if you buy it.
Configuration
- Turn expiry dates on.
- Edit a product, open its Expiry tab below Inventory, and type the date it can no longer be sold after.
- Write the message customers see, and choose whether it appears on the cart, at checkout, or both.
Screenshots

The Expiry tab on a product. Type the date it can no longer be sold after, and the time of day if the date alone is not close enough.

The Expires column on your products list. Every date in the shop on one screen, with whatever has already stopped selling marked.

A product whose date has passed. The Add to cart button is gone and your own sentence stands where it was.

A cart holding something that has since gone off. The product is named at the top, the shop's own message sits with the totals, and the order will not go through until it comes out.

The same cart at the checkout. A customer who comes straight to this page is refused here too, so an expired product cannot be paid for by skipping the cart.

The two sentences a customer reads are yours to write, and %s is where the products get named.