xpay✦ Commerce
Directory
WooCommerce plugins
Product Expiry for WooCommerce
Product Expiry for WooCommerce
Add expiry dates to WooCommerce products and variations, then auto set them out of stock, draft, or expired and email you when they expire.
4.5
(13 ratings)Will this break my store?
What the WordPress.org registry says about keeping Product Expiry for WooCommerce running.
Tested to 7.0.2
Tested against the WordPress branch in use today.2 days ago
At least 4.1 releases a year since launch. WordPress.org only lists versions still available for download, so the real number may be higher.7.2
Your host must be running at least this version.6.0
1
A single maintainer. Worth knowing if the plugin is load-bearing for your store.Maintenance & trust
Scored on how Product Expiry for WooCommerce is looked after — not on how many stores run it.
95
out of 100Maintenance
35 / 35WordPress compatibility
20 / 20Support responsiveness
Not enough dataMerchant satisfaction
11 / 15Listing transparency
10 / 10Ratings
4.5
13 ratingsProduct Expiry for WooCommerce gives every product and variation in your store an expiry date. When that date passes, the plugin does the cleanup for you. It can move the product to draft, set it out of stock, reduce its stock, or keep it visible with an “Expired” badge and the add to cart button disabled. You can also get an email the moment something expires.
No more forgotten sale items sitting live in your catalog. No more manually hunting for last season’s stock. You set the date once, and the plugin handles the rest on schedule.
It works for any store that sells things with a shelf life: food, cosmetics, and supplements, limited time offers and flash sales, seasonal lines, digital licenses and event tickets, rentals, and classified style listings.
What it does for you
Set an expiry date on any product or variation. You can also add a short note that shows instead of the date, like “Sold out for the season”. Expiry respects your site timezone and triggers at the end of the chosen day, scheduled individually per product so nothing fires early or late.
When a product expires, you choose what happens to it:
- Leave it alone and just record that it expired
- Move it to draft so it disappears from the store
- Set it out of stock while keeping the page live
- Reduce its stock by a set amount, handled through WooCommerce so HPOS and lookup tables stay in sync
- Mark it as expired, which keeps the product visible, shows an “Expired” badge, and turns off add to cart
Show the expiry date where customers can see it
Turn the expiry date on or off for single product pages and shop and archive pages. You decide where it appears using a dropdown of common positions, or paste in a custom hook if your theme uses its own. You control the wording around the date with an {expiry_date} placeholder, set your own date format, and decide what shows after a product expires: keep the date, hide it, or swap in custom text.
The “Expired” badge is yours to style too. Change the label, pick the background color, and choose where it sits on single and archive pages. Variable products with no date of their own can roll up and display the soonest expiring variation on the parent. There is also a simple shortcode, [expiry_date before="" after=""], for dropping the date anywhere.
Keep it in orders and emails
Show the expiry date inside order details for both you and your customer, and include it in WooCommerce order emails so the record travels with every purchase. You can also send yourself an email notification when a product expires, with custom recipients and your own subject and body using {product_name}, {expiry_date}, and {product_url} placeholders.
Manage everything from the products list
A sortable Expiry column shows dates right in the products table, with a per variation breakdown for variable products. Quick edit the date, note, and action without opening the product. Filter the list to find what needs attention: within 7 days, within 30 days, this month, next month, within 3 months, within 6 months, or already expired. A Product Expiry Overview widget on your WordPress dashboard sums up what is already expired and what is expiring in the next 7 and 30 days, with one click through to the matching filtered list. There is also an Email Log of the last 30 days of plugin emails, showing recipient, subject, type, and whether each one sent or failed.
Built to fit your store
- Works with any well coded WooCommerce theme, no template editing needed
- Translation ready, with WPML and Polylang sync across translated products
- Full RTL stylesheet
- No external API calls on the frontend and no tracking
- Clean uninstall with no leftover options or cron jobs
Pro version
Product Expiry Pro for WooCommerce runs on top of the free plugin and adds the features stores ask for most:
- Exact expiry time in hours and minutes, not just the date, so you can expire a flash sale at 6:00 PM sharp
- Live countdown timer on product pages, and optionally archives, in three styles (blocks, badge, or minimal) with an urgency threshold and optional seconds
- Customer reminder emails that tell buyers when something they purchased is about to expire, sent as one branded email per order and deduped so nobody gets spammed
- Admin reminder emails that summarize everything expiring in the next few days
- Auto discount before expiry that puts products on sale a set number of days out, by percentage or fixed amount, and restores the original price automatically afterward
- Batch and lot tracking with quantity, supplier, and lot number per batch, listed earliest expiry first, plus a recall lookup that finds orders containing a given batch
- CSV bulk tools to export every product with its expiry data, edit in a spreadsheet, and re import to update thousands of products at once
- Premium dashboard that monitors every expiring product with status and date range filters
- Inline plugin updates from your WordPress admin
Useful Links
Yes. Every variation can have its own date, action, and note, set right inside the variation. A variable product can also show the soonest expiring variation on the parent page.
Whatever you choose per product. It can be left as is, moved to draft, set out of stock, have its stock reduced by an amount, or marked as expired with a badge and add to cart turned off.
Yes. Each product expires at the end of its chosen day in your site timezone, scheduled per product so it triggers at the right moment rather than on a shared batch.
Yes. You can show or hide it on single product and shop pages, control exactly where it appears, choose its wording with a placeholder, and set your own date format.
Yes. The plugin can email you the moment a product expires. You can set custom recipients and write your own subject and body using placeholders for the product name, date, and URL.
You can quick edit the date, note, and action straight from the products list. For bulk updates across many products at once, the Pro version adds CSV export and import.
Yes. Stock and order actions run through WooCommerce CRUD methods, so HPOS and product lookup tables stay in sync.
Yes. Expiry data syncs across translated products with both WPML and Polylang, and the markup supports translation.
Setting an exact time in hours and minutes is a Pro feature, along with a live countdown timer for product pages.
Yes, in the Pro version. It sends buyers one branded reminder email per order a set number of days before expiry.
Yes, in the Pro version. You can put products on sale a chosen number of days before expiry, by percentage or fixed amount, and the original price is restored automatically.
No. There are no external API calls on the frontend and no tracking. Expiry actions run on scheduled events rather than on every page load.
The plugin removes its options and scheduled events on uninstall, so you are not left with orphaned data.
Categories
Plugin details
Tags on WordPress.org
