Bulk tools, records and WP-CLI

Assigning source currencies at scale, the CSV model and its partial-commit behaviour, the audit log, and the command line.

Updated August 2, 2026

Bulk source-currency assignment

The Bulk tools tab assigns a source currency across many products at once, which is the difference between a two-minute job and an afternoon of clicking on a catalogue of any real size.

CSV import and export

Export streams the current source pricing as CSV. Import accepts pasted CSV in a textarea.

There is deliberately no file upload. The plugin’s filesystem attack surface is zero by construction, and a CSV importer is not worth trading that guarantee for. Pasting scales perfectly well to the catalogue sizes this screen is meant for.

Partial commit is explicit

Each row validates and commits independently. A failure on row 400 does not roll back rows 1 to 399, and the importer does not pretend otherwise: every skipped row is reported with a bounded, typed reason. You get a list of exactly what did not go in and why, rather than a single “import failed” and an unknown database state.

Rate history

Pro keeps rate history in its own table with a configurable retention window, and renders it as a dependency-free SVG chart — no charting library, no external script, no CDN request. Old rows are pruned by a scheduled action.

Audit log

The Records tab reads both the rate history and the audit log. The log records who changed what and when, and which rate table was applied to the catalogue.

Entries are chained so that tampering is detectable. Serialisation uses a connection-scoped database advisory lock: it is owned by the connection and released automatically if the process dies, which a timed option lease is not. When two processes contend, the loser does not wait and does not discard evidence — it writes the existing signed detached form. An option-based lease remains only as a fallback where advisory locks are unavailable.

Email notifications

Throttled alerts for a stale rate, a provider that is down, a rate table held for approval, and repeated security failures. Throttling matters: an alert that fires every ten minutes during a provider outage is an alert you will filter to trash and then miss the one that mattered.

WP-CLI

wp panchor status
wp panchor rates update
wp panchor rates list
wp panchor sync run
wp panchor sync status
wp panchor guard show
wp panchor guard approve
wp panchor guard discard

These are the commands that make Price Anchor deployable. A staging-to-production release can fetch rates, run a full catalogue pass and confirm the job finished without anyone opening wp-admin, and an approval can be scripted into a controlled release window rather than depending on someone being logged in.