Use reCAPTCHA with the WooCommerce Checkout block
Updated September 13, 2026
The plugin supports both the classic shortcode checkout and the newer WooCommerce Checkout block. Block support arrived in version 1.4.0 and needs no separate setting: tick WooCommerce Checkout at Settings › reCAPTCHA WooCommerce and it works on either.
The two checkouts submit orders differently, so a few behaviours are worth knowing.
How verification works on the block checkout
The block checkout submits through the WooCommerce Store API rather than a normal form post. The plugin registers its own data on the Store API checkout endpoint under the rcfwc namespace, and the reCAPTCHA token travels there.
When the customer ticks the box, a callback stores the token in the checkout’s extension data. On submit, the server reads it back and verifies it with Google. A missing or empty token fails the order with the standard error message.
Where the widget appears
Your Widget Location on Checkout setting maps onto the block layout by attaching to a specific block:
- Before Payment and After Payment attach to the Payment block.
- Before Billing attaches above the Contact Information block.
- After Billing attaches above the Shipping Methods block.
- Before Submit Button attaches above the Actions block.
If you have customised your checkout page and removed one of those blocks, the widget has nothing to attach to and will not render. A digital-only store with no shipping, for example, may have no Shipping Methods block, which breaks the After Billing position. Before Payment is the most reliable choice because virtually every checkout keeps the Payment block.
Rendering behaviour
Blocks mount and re-render as the customer edits the cart, so the plugin watches for its container and renders the widget explicitly once the block is in place. Once rendered, it stops watching to avoid rendering twice.
If the token expires or is cleared, the stored extension data is emptied and the customer has to tick the box again before the order will submit.
Testing the block checkout
Test in a private browsing window with an item in the cart, and check two things: that the widget renders exactly once, and that submitting without ticking it is rejected. A widget that renders but never blocks anything means the Store API side is not wired up, which usually points to an outdated WooCommerce version.


