Who Changed It/Answers

Who edited this page — and what exactly changed?

The pricing is wrong, the headline reads differently, the meta description got rewritten. Somebody edited the page. "Post updated" is not an answer — you need the name, the minute, and the old value next to the new one.

Why "check the revisions" usually isn't enough

WordPress revisions are genuinely useful, and for plain body-text edits they will often tell you who saved what. But they cover a narrow slice of a modern page:

So the failure mode is predictable: the change you actually care about — a rewritten meta description, a swapped price inside a builder widget — is precisely the kind revisions do not capture.

What a field-level activity log records instead

Who Changed It treats every save as a set of named field changes, not one "post updated" event. Today that covers the post itself — title, slug, excerpt, author, parent, password protection and how much the content grew or shrank — each with its old and new value, and the acting user, role and IP attached. Post meta, which is where SEO fields, ACF values and page-builder layouts live, is the next thing landing. The record for a suspicious edit reads:

#40912 · 14:32 · m.vlk · post_updated · "Pricing" — post_title: "Pricing" → "Plans & Pricing" · content −38 words · flagged strange

The old value is always readable on the left, the new one on the right — so reversing a bad edit is a copy-paste, not an archaeology project. You can see this exact interaction in the live demo: open a row and read the diff inline, exactly as it appears on the plugin's own screen.

Finding the edit fast when you have hundreds of events

On a busy site, the hard part is not recording edits — it is finding the one that matters. Two things do that here. Filters narrow the timeline to content events on one target. And behaviour scoring compares each edit to the editor's own baseline (their usual hours, frequency, role and IP), so an account that edits four posts a week suddenly rewriting the pricing page at an odd hour is flagged before you even ask. Every escalation stores a human-readable reason, so the log tells you why it thought a row was worth your attention rather than leaving you to infer it.

Occasionally the answer is that nobody on your team made the edit at all: links appearing in old posts, a meta description rewritten overnight, content changing under an account that was not signed in. That is a compromise rather than an editorial mystery, and restoring the revision only papers over it — the useful next step is a cleanup that also finds the way in. The log is what makes that hunt short, because it gives the responder a timestamp to work backwards from.

Common questions

How is this different from WordPress revisions?
Revisions snapshot title, content and excerpt for post types that support them — nothing else, and they can be capped or disabled entirely. An activity log records who, when, from where and through which door, with a before/after for every field including meta, SEO, builder data, slug and status, and it also sees edits made over REST or WP-CLI.
Does it work with WooCommerce, Yoast, ACF and Elementor?
WooCommerce is supported today: prices, coupons, order status changes, refunds, store settings and payment gateway configuration, with gateway secrets never stored. Yoast, ACF and Elementor support is landing in the next release — those live in post meta, which the current version does not diff. Anything else can register its own events with a single hook, and changes to watched options are captured generically.
Can it restore the previous version?
No — it is an audit tool, not a rollback plugin, and it never writes to your content. It shows you the previous value of every changed field, readable and copyable, so restoring the old text takes seconds and you know exactly what you are putting back.