Put a Form on WordPress with the plugin and shortcode
Put a Form on WordPress without pasting markup on every page: upload the free single-file plugin once, then place the Form's shortcode in a Shortcode block and let it keep its fields.
![A dark plate titled 'One shortcode. Current fields.' showing a WordPress page holding a [formflow] shortcode, an arrow to a FormFlow card, an arrow to a generated component, and a cache loop back.](https://formflow.digital/storage/blog/gallery/01M5H1SF5NY3F7YD486R41WX2H.webp)
FormFlow v1.32.0 shipped on 2026-10-04 and added a WordPress tab to Get code. It is the shortest path from a Form to a WordPress page: one plugin uploaded once, one shortcode pasted per page, and the Form keeps its current fields without anyone pasting markup again.
The Release is recorded in the Changelog. This tutorial covers the three steps, the attributes that matter and the behaviour you get when FormFlow is not reachable.
What the plugin is, and is not
The download is a single PHP file, packed in formflow-wordpress.zip with one entry, formflow/formflow.php. It registers one shortcode, makes one request to FormFlow, caches the answer for five minutes, and prints the markup it receives. It is free on every plan.
That is the whole plugin. It does not reimplement the Form and it does not decide anything: admission, spam judgment, Strict mode, Turnstile and delivery all stay on FormFlow's server. A plugin installed on a customer's site cannot be edited later, so keeping every decision on our side is deliberate.
Upload it once
Open the Form, press Get code and choose the WordPress tab.
Press Download WordPress plugin. Your site receives formflow-wordpress.zip.
In WordPress, go to Plugins → Add New → Upload Plugin, choose the file and install it.
Activate it. The plugin needs WordPress 5.8 or later and PHP 7.4 or later.
The shortcode is in the same tab. Copy it from the field under Copy to clipboard: the tab prints it with the Style and the Live rendering choice currently selected in Get code, so what you paste matches the preview you just looked at.
Place the shortcode
Add a Shortcode block to the page or post and paste the line into it.
[formflow form="FORMFLOW_TOKEN" style="minimal" live="1"]Three attributes carry the placement.
form is the Form's token. It is the only thing the plugin sends to FormFlow, and it is checked before a request is made.
style is the Style you chose in Get code, such as minimal or bootstrap. Recording it means a later change to the default never restyles a page placed with the old one.
live turns Live rendering on with the value 1. Omit it and the shortcode prints the plain generated component, which is the better choice when you do not want a second request from the visitor's browser.
What happens when FormFlow cannot be reached
The plugin is a fetch and a cache, so its failure behaviour is the part worth understanding before you rely on it.
A good response is cached for five minutes, so a busy page does not call FormFlow on every view.
The last good copy is also kept in the site's own options. If the request times out, is rate limited or returns a server error, the page prints that copy instead.
If there is no copy at all, a visitor sees nothing and a signed-in editor sees a short notice naming the token and the HTTP status.
If the Form is gone, or closed, the plugin prints nothing to visitors and tells editors why. The stored copy is kept rather than wiped, so one wrong answer cannot erase it.
Where it stops
There is no Gutenberg block. The Shortcode block is the supported path, and it works in the block editor.
There is no WordPress settings page, no automatic plugin update and no wordpress.org listing. You upload and update the file yourself.
WordPress never writes to FormFlow. Placing a Form does not add the site to a Form's allowlist, and the plugin cannot create or edit a Form.
The plugin is not an AI integration. FormFlow is not connected to the WordPress 7.0 AI Connectors screen.
Where to go next
If you have not placed a Form anywhere yet, read the post on embedding a Form with the generated component: the shortcode prints the same markup, so the two paths end in the same place. If the page is not in English, the v1.7 post explains how a Form's language follows it from the Hosted page into an embedded copy. For the contract behind the request, see the API reference.