Who Changed It/Answers

A WooCommerce activity log: who changed the price, the order, the gateway?

On a blog, an unexplained change is annoying. In a store, it costs money by the hour — a product at the wrong price, a payment gateway switched into test mode, a sale price still running a fortnight after the campaign. A WooCommerce audit log exists so a store keeps receipts for its own changes.

The changes that cost money are the quiet ones

WooCommerce keeps order notes, and that is about it. Price changes, coupon edits and store settings changes leave no history at all. The expensive failures are rarely dramatic — they are quiet states nobody chose on purpose and nobody notices for a while:

Without a log, the recovery conversation is guesswork between everyone who has admin access, plus every plugin and integration that writes to the catalogue.

What a WooCommerce audit log records in a store

Who Changed It adds WooCommerce support automatically when WooCommerce is active, on top of everything it already records site-wide. The commerce-specific events are the ones the general content hooks cannot see, each with the old value next to the new one — the full list with severities is in the event reference:

Products, coupons and — on the legacy storage — orders are ordinary WordPress content underneath, so creating, trashing and deleting them is already covered by the general content events, in the same timeline.

#41203 · 02:14 · no user · product_price_changed · "Alpine Jacket" — _regular_price: "189.00" → "18.90" — dangerous

Notice what the actor column says there, because it does a lot of work in a store: so much of a catalogue is written by software — feed syncs, ERP connectors, dynamic-pricing rules, dropshipping tools — and those run without a logged-in user. A price rewritten at 02:14 with no user behind it is not a mystery to solve by asking your staff; it tells you to go and look at an integration. A change one of your people made carries their name, role, IP and session instead.

What it does not record

Worth stating outright, because store owners reasonably assume otherwise. There is no tracking of stock quantities, edits to line items inside an existing order, shipping zones, the tax rate tables, or coupon expiry and usage limits — the tax entries above are the store-level toggles, not the rates themselves. And nothing about your customers' own activity is recorded: this is an audit trail for the people and software that administer the store, not analytics for the people shopping in it.

Accountability without surveillance theatre

Stores have staff, and staff make normal changes all day. The point of behaviour scoring is that normal stays quiet: the person who updates prices every morning never lights up the board. What surfaces is deviation — an edit at an hour that account never works, a sign-in from an address it has never used before touching the catalogue, or a payment gateway being reconfigured at all. When the accountant asks about a refund from March, filter the timeline to that order and export the rows as CSV or JSON — export is part of the free plugin, so evidence is never behind a paywall, and each export carries a manifest and the record hashes so the file can be verified later.

Worth being clear about the limit, though: a log records the store, it does not defend it. A shop with a dozen integrations, staff accounts, a payment gateway and a checkout worth attacking wants preventative work underneath the audit trail — which is where an independent WordPress security audit earns its keep (WooCommerce and multisite are covered when they are named in the scope), together with a hardened host under it. Both are what this plugin's author does day to day at WP Server Guard.

Common questions

Does it log order status changes and refunds?
Status transitions and refunds, yes — a status change records the old status, the new one and the order total, on both legacy and HPOS order storage. Edits to individual line items inside an order are not tracked. A refund issued by a person in wp-admin carries that staff member, their role, IP and session; one triggered by a gateway webhook has no logged-in user behind it and the record shows that, which is what distinguishes the two.
Will logging slow down a busy store?
A page view that changes nothing does no extra work — the log only writes when something actually changed. An order status change or a price edit does cost one insert on that request, into a single indexed table; that is the trade an audit trail makes, since a record you might lose is worth less than one that costs a millisecond. Per-family retention keeps the table pruned on high-volume stores.
Can it tell a human price change from an automated one?
In practice, yes. A manual edit carries the staff member's name, role, IP and session. A feed sync, ERP connector or cron job runs without a logged-in user, so its records show no user at all — which is the signal you need to stop asking your team and start reading integration logs. What the record does not do is name which automation made the change; that inference is yours, usually from the timing and the pattern.
Does it log customer or checkout activity?
No, and deliberately. This is an audit trail for the people and software administering the store — staff, integrations, admins — not analytics for your shoppers. Customers browsing, adding to cart or checking out are not recorded, and neither is anything about their behaviour on the storefront. Orders appear when their status changes or they are refunded, because those are administrative actions with money attached.