← All plugins

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.

Free pluginPro · from $49/year
Product Expiry Dates for WooCommerce graphic

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.

Pro is the complete plugin. It adds all of the above, and it keeps every date and setting you have already made.

See it in action

Set one figure and stop typing dates. Every product without a date of its own stops selling a set number of days after it went live, so something added on a busy morning is covered without anybody having to remember to go back to it.
A figure for each part of the shop, because bread and hard cheese do not keep for the same length of time. A category with nothing set of its own takes the figure from the category above it, or from the shop's.
What stops selling this week, on your dashboard, while there is still time to do something with it. The same list can arrive by email each morning, and nothing is sent on a morning when there is nothing to say.
Take something off as the date comes closer, and more off in the last day or two, so stock that would have been thrown away sells instead. Nothing is written onto your prices: extend a date and the full price comes back by itself.
Type a date straight into the list without opening the product. The column shows every date in the shop, and marks the ones your shelf life worked out as well as the ones taken off a product's variations.
Make the message look like the rest of your shop. The colour of the words and of the band beside them, a box or no box, a clock or a warning, the weight and the size — with a panel that changes as you choose so you see it before your customers do.
Let the accounts you choose buy anyway. A trade account can take the last of something a date has caught while customers cannot, so stock you are no longer allowed to sell leaves the shop instead of the bin.
What the reduction looks like to a customer. The old price is struck through beside the new one, on your own shop page, worked out from the date each product carries rather than from a sale price anybody had to type in.

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
  • Settings import and export
  • 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

Pricing

Every Pro plan is the same plugin with every feature. The only difference is how many sites you can run it on.

Prices in

Free

The free plugin, free forever. Distributed through WordPress.org. No licence, no account.

$0

Get Free

on WordPress.org

Single site

One site, with a year of updates and support.

$49/year

Secure checkout. Cancel any time.

5 sites

Most popular

Up to 5 sites, with a year of updates and support.

$99/year

Secure checkout. Cancel any time.

25 sites

Up to 25 sites, with a year of updates and support.

$199/year

Secure checkout. Cancel any time.

Need more than 25 sites? Get in touch about a custom licence.

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. 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.

Version 1.0.0Requires WordPress 6.7+ · WooCommerce 10.0+ · PHP 8.1+Last updated 30 Sept 2026

More plugins