Food Products for WooCommerce turns your WooCommerce shop into a food shop. It adds two
new product types -
Food Simple Product and
Food Variable Product - that work exactly
like WooCommerce's own Simple and Variable products, with everything a food or grocery shop
needs on top: a nutrition declaration table, expiry dates, batch and supplier tracking, and
automatic handling of stock that is about to go off.
Nothing is replaced or overridden: your existing products, themes and payment gateways carry
on untouched. You choose the new product type only on the products that need it.
Nutrition declaration table
Every food product gets a
Nutrition tab: a label/amount/unit table declared per 100 g or
per 100 ml (pre-filled with the EU-mandatory energy / fat / carbohydrate / protein / salt rows,
all editable) that is shown to shoppers as its own tab on the product page. Rows can be
reordered, renamed, indented as sub-nutrients, added and removed. Food Variable Products can
share one table across every variation, or let a single variation override it with its own.
Ingredient list
An
Ingredients tab holding the ingredients in declaration order, each with an optional
percentage, sub-ingredients and one of the 14 EU-declarable allergens. The product page prints
the list as one sentence with allergens in bold, plus a "may contain" line. Per-variation
overrides work the same way as for nutrition.
Expiry dates and batch tracking
The
Expiry & Tracking tab stores one row per batch, each with an expiry date, quantity,
batch number, batch date and supplier - so you always know which delivery a unit of stock came
from and when it goes off. Food Variable Products track batches per variation, matching how
WooCommerce already tracks stock. Every sale takes a unit off the batch closest to its date,
and a refund puts it back, so the table reads as what is still on the shelf.
Optionally, the closest upcoming expiry date is shown to shoppers on the product page - always,
or only once it falls within a number of days you choose.
Expiry Dashboard and write-off
An admin screen listing every batch row across every food product in one place, sorted by
closest expiry date first, colour-coded by urgency, filterable by date range and exportable as
a CSV file for your stock takes and audits. A batch that has expired can be written off from
there or from the product itself, taking what is left of it out of the sellable stock - or you
can have that happen automatically every night at an hour you choose.
The batch table is the stock
Once a product tracks batches, its batch table
is its stock. WooCommerce's own stock
management is switched off for it and stays off; the product is in stock while a batch in date
has units left, "N in stock" on the product page is the batch total, and a shopper cannot buy
more than the batches hold. Every sale comes off a batch - a full-price sale off the freshest
batch first, so the batch nearest its date is kept for the reduced offer - and a refund puts the
units back. Stock past its best-before date is not sold at all unless you say so (see below).
Automatic Markdown
Offer a discount on the batch closest to its date, on a ladder of steps you set (for example
15% a week out, 30% three days out, 50% on the last day). The product's own price is never
changed: the shopper opts into the reduced batch on the product page, the discount applies to
that cart line only, and the offer withdraws itself once the batch is sold out or expired. A cap
on units per batch, a price floor, a catalogue badge and a choice of whether a product with
nothing left to sell stays listed or is hidden are all yours to set, and any product can opt out.
Where the law allows it, you can also choose to keep selling batches past their best-before
date: that adds a fixed last step to the ladder with its own discount and wording, and those
units count as sellable stock. A
Markdown Earnings
screen reports what each marked-down batch sold, what it brought in, what the discount cost, and
how much expired unsold anyway.
Email when expired
A scheduled digest email listing every batch that has reached its expiry date - or is about to,
within a window you choose - sent to the shop users you pick, daily, weekly, every 2 weeks or
every 3 weeks. Each batch is only ever mailed once, every send is recorded in an Email Log, and
a "Send Notification Email Now" button lets you run it on demand. Individual products can opt
out.
Automatic category switching
Have WooCommerce move stock for you: categories you choose (for example "Clearance" or "Last
chance") are added to a product as it nears its closest expiry date, and categories are removed
- or every category stripped - once that date has passed. If a fresh, later-dated batch pushes
the expiry date back out, both changes are reversed automatically, and categories you assigned
by hand are never touched. An optional Switching Log screen records every move the nightly
run makes, with the product, the direction and the batch that caused it.
Built for real shops
- Fully translation-ready, with a choice of date formats for the dates it prints.
- WooCommerce HPOS (High-Performance Order Storage) and Cart & Checkout Blocks
compatible.
- No account, no subscription, no external service: the plugin never contacts a remote server
and sends no analytics or telemetry of any kind. Everything runs on your own site.
- No bundled third-party libraries - it uses the copies of jQuery and Select2 that WordPress
and WooCommerce already ship.
- Every file shipped is unminified, human-readable source. There is no build step.
Requirements
WooCommerce must be installed and active. The plugin will not activate without it, and
deactivates itself with an explanatory notice if WooCommerce is later disabled.