WordPress plugin · free · GPL
Find out which nonce failed, and why.
WordPress tells you “Are you sure you want to do this?” and stops. It will not say which nonce, or why. This plugin watches every nonce check, records the ones that genuinely blocked something, and states the most likely cause with the specific thing to check next.
- Version
- 1.2.0
- Requires
- WordPress 5.6
- Tested up to
- WordPress 7.1
- Requires PHP
- 7.4
- Licence
- GPL, free
No nonce was submitted
The field or query argument never reached the server.
- Next check
- Confirm the form actually renders wp_nonce_field(), and that nothing strips the hidden input before submit.
- action
- woocommerce-process_checkout
- request
- ajax · POST · /wp-admin/admin-ajax.php
- source
- woocommerce/includes/class-wc-ajax.php
- user
- logged in
An illustration of the fields one recorded failure contains — not a screenshot. Pick a cause above.
What it diagnoses
Five errors that all mean the same thing, and never say so.
“Are you sure you want to do this?”
The classic admin nonce failure. WordPress blocks the request and gives you nothing else to go on.
“Security check failed”
The same failure, phrased by a plugin or a theme instead of by core.
“The link you followed has expired”
An expired nonce on a link or a form — usually a page left open too long.
A silent 403 from admin-ajax.php
Or a bare −1 response. Nothing on screen, nothing in the log, nothing to search for.
A form that appears to do nothing
It submits, the page reloads, and whatever you changed did not save.
Causes it tells apart
Five different problems produce one identical message.
Each is diagnosed separately, and the plugin says whether it is confirmed fact or inference.
No nonce was submitted
The field or query argument never reached the server. Confirmed, not inferred.
The session ended
An auth cookie arrived but no longer resolves to a user.
A cached page served a stale nonce
Detected when an anonymous request fails while a known caching layer is active.
No session token
The user is logged in but has no session for the nonce to key against.
Expired or mismatched action
Everything needed was present, so the value itself did not match.
What it touches
Read-only, and it stores no secrets.
What it records
- The most likely cause, with an explicit confidence level
- A concrete next check to run
- The nonce action string
- Request type — ajax, rest, admin, admin-post, cron, cli, frontend — plus method and path
- A best-effort guess at which plugin or theme ran the check
- Whether the user was logged in
What it never records
- The nonce value itself
- Authentication cookies or session tokens
- Passwords, API keys, or any request body
- Query strings, which routinely carry one-time tokens
Function arguments are excluded from the stack trace capture, so sensitive values are never even loaded into memory during attribution.
Inside the plugin
Three screens.
01 Recorded failures
02 Causes and fixes
03 Environment
Questions
Nonces, and what goes wrong with them.
Why does WordPress say “Are you sure you want to do this?”
What is a nonce in WordPress?
Does this fix nonce failures?
Why is my log empty?
Will it slow my site down?
Why does it say “possible cause” rather than telling me exactly what happened?
Is it safe on a production site?
Does it work with multisite?
Install it from your own dashboard.
Plugins → Add New → search for “Nonce Failure Explainer”. Free, GPL, and nothing to configure.