Product Expiry Dates for WooCommerce
Give a product a date it can no longer be sold after. It comes off sale when that date passes, and a basket still holding it cannot be checked out.

What it does
Some things should not be sold after a certain date. Food and drink have a best-before date, a licence or a warranty covers a fixed period, a seasonal line stops making sense in February, and an event ticket is worthless the morning after. WooCommerce has no way to say so.
Product Expiry Dates adds an Expiry tab to every product, with one box on it: the date that product can no longer be sold after. When that moment passes it comes off sale on its own, without anybody having to remember.
The date is enforced in both of the places it has to be. A product past its date cannot be added to a basket, and a basket that already had one in it cannot be checked out — which matters more than it sounds, because a basket can easily outlive the date it was filled before. The customer is told which product to take out, by name.
An expired product is taken off sale, not marked out of stock. It has not run out of units, and saying that it has would tell every report, feed and stock email something untrue about your shop. It stays in your shop, unbuyable, with a line on the page explaining why.
Pro is for shops where one date box per product is not enough. A shelf life dates your whole catalogue at once, and each category can carry a figure of its own — days for salad, years for tins. Variations can be dated separately, dates can be typed straight into the products list or carried in and out through your product CSV, and staff and trade accounts can be allowed to buy past-date stock so last season's lines still clear. It warns you a few days before a date passes, on your dashboard and by email, and can mark stock down as the date approaches so it sells instead of being thrown away.
The free version is permanent. It does not expire, needs no licence key, and never contacts Plugin City. Pro is the complete plugin — everything in Free plus the above — and it installs in place of the free version, keeping every date and setting you have already made.
What Free includes
Free forever on WordPress.org.
- 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 by itself once the date passes, with a sentence saying why
- Baskets that outlived the date refused at the checkout, naming the product to remove
- Notices on the cart, checkout and mini-cart
- Classic checkout and the Cart and Checkout blocks both covered
- PayPal express buttons refused too, so a one-tap order cannot get past the date
- An optional time of day, so a date can end at a minute rather than at midnight
- A shortcode, [pexp_message], to put the message anywhere
- High-Performance Order Storage compatible
What Pro adds
Everything in Free, plus all of the features below.
- Roles the dates do not apply to, so staff and trade accounts can clear past-date stock
- A shelf life for the whole shop, dating every product that has none of its own
- A shelf life per category, because salad lasts days and tinned goods last years
- A date on each variation, for a product whose sizes or flavours do not all last as long
- A choice of what else happens at expiry: hide the product, or move it to draft
- Warnings of what stops selling in the next few days, on your dashboard and by email
- Reduced to clear: a percentage off as the date approaches, and a deeper one at the end
- Dates in Quick Edit and Bulk Edit, to date or shift a whole selection at once
- An expiry column in the WooCommerce product CSV export and import
- Settings import and export
Pricing
Free
The free plugin, free forever. Distributed through WordPress.org. No licence, no account.
£0
Get free on WordPress.orgPro
The complete plugin with every feature, plus a year of updates and support.
£49/year
Checkout coming soon.
Frequently asked questions
What happens when a date passes?
The product comes off sale. Its buy button goes and the page says it is no longer available, in whatever words you chose. Anybody who already had it in their basket is asked to take it out before ordering.
Is an expired product hidden, or marked out of stock?
Neither, in the free version. It stays listed, its page still works and explains itself, and its stock is left alone, because how many you have has not changed. Pro can hide it or move it to draft instead.
Can I set a time as well as a date?
Yes. Leave the time empty and the product sells until the end of the day you typed, which is how a best-before date reads. Fill it in and it stops at that minute, which suits an event or a deadline.
Can different categories have different shelf lives?
Yes, in Pro. Every product category has a days-on-sale box, so salad can be dated in days and tinned goods in years, or a category can be left out of the shelf life altogether.
Can staff and trade accounts still buy past-date stock?
Yes, in Pro. Tick the roles the dates should not apply to. Everyone else, including anybody who is not logged in, is still held to them.
Can I be warned before a date passes, rather than after?
Yes, in Pro. A dashboard panel lists what stops selling in the next few days, soonest first, and the same list can be emailed each morning. Nothing coming up means nothing sent.
Can stock be marked down as its date approaches?
Yes, in Pro. Set a percentage off in the last week and a deeper one in the last days, and stock that would have been thrown away sells instead. Nothing is written onto your products, so extending a date puts the full price back the same moment.
Can I set dates on hundreds of products at once?
Yes, in Pro. Quick Edit types a date straight into the products list, Bulk Edit dates or shifts a whole selection, and the WooCommerce product CSV carries an expiry column both ways.
What happens to my dates if a Pro licence lapses?
They stay, and they carry on taking products off sale — it would serve nobody for out-of-date stock to become sellable again because a card was declined. What stops is the deciding: new products stop being given a shelf life, and clearance discounts end so your normal prices come back.
More plugins

Estimated Delivery Dates for WooCommerce
Tell customers when their order will arrive, and your team when it has to leave. Estimates on the product page, cart, checkout and emails.

Delivery Notes for WooCommerce
Let customers add delivery instructions at checkout and print them exactly where your team needs them.

Stock Alerts for WooCommerce
Let customers subscribe to back-in-stock alerts and automatically bring them back the moment a product returns.