This is the user-facing guide. If you're a developer poking at the code, see pbj-form-builder-CODE-EXPLAINER.md.
pbj-form-builder.zip and click Install Now.Go to Form Builder → Settings.
{form} is replaced with the form title (default: Receipt: {form}).The buyer's address is taken from the first Email-type field on the form (falling back to any submitted value that looks like an email). If the form has no email field, no receipt is sent.
Both CAPTCHA and Honeypot have global toggles here AND per-form toggles in the form editor. A feature has to be enabled at both levels to be active on a given form.
Behind Cloudflare or another reverse proxy? As of 1.2.0 the rate limiter only trusts the direct connection IP (REMOTE_ADDR) by default, because proxy headers are trivially spoofable. If your site sits behind Cloudflare (or a proxy you control that sets CF-Connecting-IP / X-Forwarded-For), add this one-liner to a small must-use plugin or your theme's functions.php so the limiter sees real visitor IPs instead of the proxy's:
add_filter( 'pbj_form_builder_trust_proxy_headers', '__return_true' );
pk_test_ or pk_live_sk_test_ or sk_live_There is no environment dropdown for Stripe — test vs live mode is decided entirely by which keys you enter. Paste your pk_test_/sk_test_ pair to test, then swap in the pk_live_/sk_live_ pair to go live. Don't mix a test key with a live key.
Note: the Stripe integration charges cards directly (no redirect). Cards that require redirect-based 3-D Secure authentication are declined with a message asking the buyer to use a different card.
Click Add field. For each field, set:
Label|value
Another label|another_value
If you skip the |value part, the value is derived from the label.
Drag the menu handle (☰) at the top of each row to reorder.
25.00. Currency comes from Settings.If you pick a gateway whose credentials aren't set in Settings, the form will fall back to a plain submit button (no payment) and the visitor won't be charged.
Click Save form. You'll see the shortcode appear at the top of the edit page.
Copy the shortcode (e.g. [pbj_form id="42"]) and paste it into any post, page, widget, or block-editor Shortcode block. Save the page. That's it.
Go to Form Builder → Submissions. You'll see every submission, newest first. Filter by form using the dropdown at the top.
Each row shows the date, form, a short summary of the first two non-hidden fields, the gateway used (if any), and the amount paid. Click View for the full field-by-field detail, IP address, and transaction ID.
Submissions are stored as a WordPress custom post type (pbj_form_entry). Deleting a form does NOT delete its submissions — they stick around so you can still see what came in. Deleting the plugin entirely (Plugins → Delete) wipes everything: settings, forms, submissions.
All three gateways have a test mode. Use it.
4111 1111 1111 1111, any future date, any CVV, any ZIP). The Square Web Payments SDK loads from sandbox.web.squarecdn.com automatically when you pick the Sandbox environment.pk_test_/sk_test_ keys and use the Stripe test cards (e.g. 4242 4242 4242 4242, any future date, any CVC, any ZIP). No environment dropdown — the keys decide the mode.For Square/PayPal, switch the environment dropdown back to Production and re-enter your live keys when you're ready to go live. For Stripe, just swap the test keys for the live ones.
"Security check failed" — the form's nonce expired. Refresh the page and submit again.
"CAPTCHA answer was incorrect" — either the answer was wrong or the form sat open for more than 30 minutes. Refresh and try again.
"Submission was too fast" — you submitted in under 2 seconds. Either your real users are unusually fast or a script is misbehaving — adjust the threshold under Settings → Anti-bot.
Square card field doesn't appear — make sure Square is enabled and the Application ID + Location ID are filled in. Open the browser console and look for errors.
Stripe card field doesn't appear — make sure Stripe is enabled and the Publishable key is filled in. Open the browser console and look for errors.
"This card requires additional authentication" — the buyer's bank demanded a redirect-based 3-D Secure challenge, which this integration deliberately disallows. The buyer should try a different card.
PayPal buttons don't appear — make sure PayPal is enabled and the Client ID is filled in. Sandbox and production use different client IDs — make sure you're using the right one for the environment you picked.
"Please complete the PayPal payment to submit this form" — you hit the submit button instead of the PayPal button. The submit button is hidden when PayPal is the gateway, but some themes restyle it back into view. The PayPal capture flow is the only way to complete a PayPal-funded submission.