SolisForms user guide
This guide is for the people who create and manage forms. It assumes no technical
knowledge. Developers wanting to extend the plugin should read architecture.md,
hooks-reference.md and addon-dev-guide.md instead.
A French translation of this guide is kept in guide-utilisateur.md.
Creating a first form
In the SolisForms menu, click Add. Two starting points are offered:
- Blank form, to start from nothing.
- A template, to start from a form already put together — contact, event registration, job application, booking, support request and a few others. A template is only a starting point: everything in it stays editable. Five further templates — quotes, payments, group registration, satisfaction survey — come with the SolisForms Pro add-on, because they use fields it provides.
You then land in the builder, laid out in three columns: the field palette on the left, your form in the middle, the settings of the selected field on the right.
Adding and arranging fields
Click a field in the palette to add it. The palette lists more than twenty of them, two per row: the search box above filters them as you type, whatever the case or accents.
The field lands right after the selected one, or at the end of the form when nothing is selected. Since the field you just added becomes the selected one in turn, several clicks in a row lay the fields down in the order you click them, at the spot you chose.
You can also drag a tile into the form and drop it wherever you like: on a field, it takes that field’s place and pushes it down; below the last one, it goes to the end.
To move a field already laid down, grab its row — anywhere on it, not just the handle — and drag. From the keyboard, reach the handle with Tab, press Space, move with the arrow keys, and press Space again to drop it.
Your system’s usual undo keys work: deleting a field is never final while you are still on the screen.
Configuring a field
Select a field and its settings appear on the right. They all share a label, an optional description and whether the field is required. Dropdowns, radio buttons and checkboxes additionally have an options editor, where each entry carries a visible label and a stored value.
The Preview button in the top bar shows the form as a visitor will see it, without having to publish it.
Field types
| Family | Fields |
|---|---|
| Text | Short text, paragraph, email address, phone, web address, password, hidden field |
| Choice | Dropdown, radio buttons, checkboxes, country |
| Numbers and dates | Number, date, time — plus slider and star rating with Pro |
| Composite | Name (first and last), postal address |
| Repeatable | A group of fields the visitor may add as many times as they wish — Pro |
| File | Attachment upload |
| Calculation and payment | Calculated field and payment field — both Pro |
| Signature | Drawn with a finger or a mouse, or typed as a full name — Pro |
| Layout | Section title, free content, page break |
| Compliance | Consent |
Fields marked Pro come from the SolisForms Pro add-on, a separate plugin. Answers already recorded through them stay readable without it — in emails, in the CSV export and on the submission screen — but the fields no longer appear in the builder.
Two fields deserve a note.
Consent records not only the ticked box, but the text shown at the moment of submission. If you later change your wording, consents already collected keep the one that was in force — which the law requires.
Password is never stored. Its value appears in no submission, no export and no email. It is only useful alongside an add-on that consumes it at submission time, for instance to create an account.
Showing a field depending on an answer
Select the field to make conditional, open Conditional logic, enable it and compose your rules: Show this field if “You are” is equal to “A business”.
You can require every rule to match, or just one of them.
A hidden field is not merely invisible: it is not required, and its value is not stored. There is no need to fear that a hidden required field will block submission.
A rule cannot target a field inside a repeatable group — the one from the SolisForms Pro add-on: the question “which row?” would have no single answer. The group as a whole can be made conditional in the usual way.
Calculating a total
The calculated field and the repeatable group are provided by the SolisForms Pro add-on, a separate plugin. Without it they do not appear in the builder, and a form that already contains one stops rendering rather than silently ignoring the field.
Add a calculated field and write its formula in its settings, naming other fields between braces:
{quantity} * {unit_price}
The four arithmetic operations and parentheses are accepted.
To total a repeatable group, five functions are available — sum, avg, min,
max, count — naming the group then the sub-field:
sum({rows.price}) * 1.2
The visitor sees the total update as they type. The server always recalculates on submission: a value changed in the browser has no effect.
Splitting into steps
Add a Page break field where you want to cut. Everything before it forms the first step, everything after it the second, and so on. A progress bar and Previous and Next buttons appear automatically.
A step whose fields are all hidden by a conditional rule is passed without being shown.
In the form settings, the Save and resume later option adds a button letting the visitor set their entry aside and receive a resume link by email.
Notifications and confirmation
Open Form settings in the builder’s top bar.
Notifications
Each form sends one notification: its recipients, subject and message.
The SolisForms Pro add-on turns this panel into a full editor — as many notifications as needed, each with a copy (Cc), a hidden copy (Bcc), a reply-to address, the uploaded files as attachments, and a condition. For instance, alerting the technical team only when the request concerns a repair.
In all these fields you can insert merge tags:
| Tag | Replaced by |
|---|---|
{field:identifier} | The value of the named field |
{all_fields} | Every answer, formatted |
{form_title} | The form title |
{entry_id}, {entry_date} | Submission number and date |
{site_name}, {site_url}, {admin_email} | Site information |
A tag also works in the Reply-To field: putting {field:email} there lets you
answer the sender straight from your mail client.
The Attach files option attaches what the visitor uploaded, instead of forcing you to fetch it from the admin.
If your emails do not arrive, the cause is almost always the sending server and not the form. The delivery log, visible on each submission, shows what was attempted. An SMTP plugin usually settles the matter.
Confirmation
Three behaviours after submission: show a message, redirect to an address, or redirect to a page of your site. The message accepts the same tags.
Publishing the form
Two ways, as you prefer:
- Block: in the page editor, add the SolisForms block and choose your form.
- Shortcode: paste
[solis_form id="12"]wherever you like, the number being the one shown in the forms list.
The form works even for a visitor who has disabled JavaScript: submission, confirmation and error display all still happen. Only the immediate comfort — live validation, moving between steps without a reload — depends on it.
Reviewing submissions
SolisForms > Submissions, then choose a form.
You can filter by status, search within the answers, restrict to a period, and sort by date. Bulk actions let you mark several submissions as spam, move them to trash or delete them.
A submission’s detail shows the answers, the sending metadata, downloadable attachments, and the history of emails and of deliveries to your other services. You can correct an answer there — every change leaves a timestamped note — and add internal notes, invisible to the visitor.
Export to CSV — provided by the SolisForms Pro add-on — produces a file that opens in a spreadsheet, accents included. Without it, submissions stay readable, correctable and deletable on screen: it is the bulk export that needs the add-on.
Deletion and GDPR
Permanently deleting a submission erases its answers, its notes, its logs and the attached files on disk. Nothing remains.
Getting a document signed
The Signature field is provided by the SolisForms Pro add-on, a separate plugin. It serves waivers, consents, quotes and registrations.
What it promises, and what it does not
Read this before using it, and pass it on to whoever asked you for a signature.
SolisForms records a consent and an integrity trace: the signature itself, the statement shown at signing time, the date and time in UTC, and a fingerprint of the content. Together they let you establish that a receipt was altered afterwards.
They do no more than that. SolisForms verifies nobody’s identity, issues no certificate, and is not a qualified electronic signature under eIDAS. The fingerprint and the document it describes are kept in the same place: whoever can change one can recompute the other. For an act that needs to stand up in court, use an electronic signature provider.
Signing
Two ways, and the second is not a fallback:
- drawing with a finger or a mouse, with “Clear the signature” to start over;
- typing a full name, which is what any visitor does when navigating by keyboard, with a screen reader, or on a device where drawing is awkward.
Both are recorded distinctly: the receipt says which one was used, and a typed name is never presented as a drawing.
You can remove the typed option from the form in the field settings. It stays available to visitors without JavaScript, who have no canvas: otherwise a required field would become impossible for them to fill in.
The consent statement
The text shown under the signature is set per field. It is frozen with the signature: changing it later does not rewrite what past signatories agreed to, and every receipt keeps the version that was on screen.
The signed receipt
Every signed submission produces a PDF shortly after it is sent — production is deferred so the visitor never waits for it. It carries the answers, the signature, the statement agreed to, the date and the fingerprint.
The Signature and document block, on a submission’s detail screen, shows the signature, the state of the receipt, its fingerprint, the result of checking it, and a download button.
The document is frozen: reworking the form afterwards — titles, labels, statement — neither regenerates it nor invalidates its fingerprint. It describes what was signed, not what the form has since become.
On a form that takes payment, the receipt is produced only once the payment is confirmed. A document issued on a pending payment would read as proof of payment.
Attaching it to an email
In a notification’s settings, Attach the signed receipt (PDF) — separate from “attach the uploaded files”. The email waits for the receipt instead of leaving without it, and the delivery log records that wait.
If the receipt cannot be produced at all, the email is sent anyway, without the attachment, and the log gives the reason: losing the notification entirely would be worse than delivering it incomplete.
Where these documents live, and for how long
Receipts and signatures are written to a private folder of the site, never to the media library, and have no public address: only an account allowed to view submissions can download them.
They follow the submission: deleting it permanently erases them too, along with the answers, the notes and the attachments.
Taking a payment
Payments are provided by the SolisForms Pro add-on, a separate plugin. Without it, the payment field and the gateway settings do not appear — and a form that already contains a payment field stops accepting submissions rather than taking them for free.
First enter your credentials under SolisForms > Settings: Stripe, PayPal or Mollie. Each section recalls the notification address to declare with the provider.
Then add a payment field to your form and choose the amount: fixed, or taken from a calculated field.
Also available:
- Quantities and summary, with subtotal, discount, tax and total, shown before payment and kept with the submission.
- Coupon codes, managed under
SolisForms > Coupon codes: amount or percentage, validity period, minimum amount, number of uses. - Tax, added or included.
- Subscriptions with Stripe and PayPal: frequency, optional trial. The Subscriptions screen shows their state and charges.
- Refund, full or partial, from a submission’s detail.
The amount is always recalculated by the server at payment time. Tampering in the browser cannot change the sum charged.
Publishing submissions on the site
Public views are provided by the SolisForms Pro add-on, a separate plugin.
Without it, the SolisForms > Views screen and the view block do not appear.
Views display submissions on your pages: a directory of participants, a gallery, a results table.
Under SolisForms > Views, create a view, choose the source form, then tick the
fields to publish one by one. Nothing is public until you have explicitly named it —
a field added to the form later will never appear without your decision.
Then set the visibility: everyone, logged-in visitors, the submission’s author only, or certain roles. You can also show only the submissions of the logged-in person, which gives a “my requests” page in a few clicks.
The view is inserted through the SolisForms view block or the shortcode
[solis_form_view id="4"].
Drafts, spam and trashed items are never shown. Password fields cannot be published.
Restricting access to a form
In the form settings:
- Opening and closing dates
- Maximum number of responses
- Login required, optionally restricted to certain roles
Past the limit, the form is replaced by the message you chose. The restriction is enforced by the server: it cannot be worked around.
Limiting spam
Three protections, which can be combined, in the form settings:
- The honeypot, on by default, invisible to visitors and filled in by robots. It asks nothing of anyone.
- Rate limiting, which caps the number of submissions from one address.
- A captcha, reCAPTCHA or Turnstile, whose keys are entered once and for all in the general settings.
Sending answers elsewhere
These three integrations are provided by the SolisForms Pro add-on, a separate plugin. Without it, the panels below do not appear in the form settings; everything else in this guide works with the free plugin alone.
In the form settings:
- Webhook: every submission is sent to an address of your choosing, as signed JSON. This is what connects the form to Zapier, Make, n8n or your own application.
- Slack: posting to a channel.
- Brevo: adding the contact to a list.
These deliveries happen in the background: a slow or failing service never delays the visitor, and the history of each attempt stays visible on the submission.
Make and n8n have no panel, and need none
Both platforms wait: a Make custom webhook and an n8n Webhook node accept the JSON the Webhook panel already sends. There is nothing to install and nothing to pick from a list — you paste the address the platform gives you, and that is it.
How to wire each one up, what the body looks like, how to verify the signature and
a worked example to test your code against are in
integration-make-n8n.md.
Zapier does have its own panel: it queries the site rather than waiting, which needs something else.
Building a dossier of pieces
Paid extension. When a form is there to receive documents — an application, a registration, a request — the Document checklist panel in the settings turns its file fields into dossier pieces: each has a name, can be required, and accepts its own formats and its own size.
The submission detail then shows the dossier: one row per piece, its state, and what it takes to decide. Four states follow one another — missing, to review, accepted, rejected.
A dossier is complete only once every required piece has been accepted, not merely received. A dossier where everything has arrived without being looked at is a dossier to review.
Three points are worth knowing:
- The rejection reason stays internal. The applicant gets a message naming the piece that was refused, never what the reviewer thought of it.
- Replacement happens from the screen, by the reviewer. The old file is not deleted: it goes with the dossier when that is purged.
- Pieces never leave the plugin’s private folder: no media library, no public URL. Deleting the submission erases them all, including those a replacement had set aside.
The Export document states button in the submissions list produces a CSV of the states — with no file paths and no internal notes.
The full account is in
checklist-documentaire.md.
Seeing where visitors give up
Paid extension. The builder offers a Friction analytics panel in the form settings. Once enabled, it counts four things: how many people reach each step, how many start typing, which fields refuse a value and for what reason, and how many submit.
The report appears under Statistics, after the view and submission charts. It names, in plain words, the step that loses the most people and the field that refuses the most values.
What is stored is a counter, never a visit. No value entered, no address, no visitor identifier, no duration. The measurement cannot reconstruct an individual journey, and that is not a setting: the table has no column where a visitor could be stored.
Three points are worth knowing before enabling it:
- Abandonment is estimated, not measured: it is the difference between those who started and those who submitted. Someone coming back the next day counts once on each side, on two separate days.
- Per-field detail disappears below twenty refusals over the period shown. On a quiet form, “one error on the Salary field” could point at one person.
- Measurement is off by default, form by form. The decision is yours, so that you can state it in your privacy policy.
Counters are kept for thirteen months, adjustable under Settings → Data.
The full account of what is measured is in
analytique-friction.md.
Arriving with the form already filled in
SolisForms Pro. The builder offers a Dynamic prefill panel. A field can be filled from the signed-in account, a named URL parameter, a fixed value, or your own PHP filter.
The browser never chooses a protected value. Account sources only ever read the visitor’s own account — the resolver asks WordPress who is signed in, and takes no user identifier from anywhere else.
A URL parameter only fills a field a rule has explicitly opened, under a name you
choose. A parameter called prenom does not fill a field called prenom:
without that naming, any field would be fillable from a forged address. Keep
nothing confidential in one — URLs are shared, bookmarked, indexed and logged.
Passwords, payments, files and signatures can never be prefilled.
A field can be locked: shown read-only, and rewritten by the server when the form is submitted. What a browser displays can be changed; what the server decides cannot. If the value can no longer be resolved — the visitor signed out, the parameter is gone — the field keeps what it had rather than being emptied.
The full account of the rules is in preremplissage.md.
Following what happens to a submission
SolisForms Pro. The builder offers an Internal processing panel. Turned on, every new submission gets a state, a person responsible, a deadline, a priority and a history.
You define your own states — eight at most — and the one a request starts in. The default offers New, In progress, Waiting and Resolved, the last one closing the file. Renaming a state later breaks nothing: its technical key does not change.
Assigning a file never grants access to it. The list only offers accounts that can already read this form’s submissions; choosing anyone else is refused. That is deliberate: without the rule, a dropdown would be enough to show an address, a phone number and attachments to any account on the site.
Three places to work:
- the submission detail carries the whole block — state, person, deadline, priority, history, internal comment;
- the submissions list shows the state and offers to move to the next step;
- SolisForms → Processing gathers every form: to process, assigned to me, overdue.
If two people change the same file at once, the second is told rather than ignored: nothing is written, and the screen shows the real state.
Internal comments stay in the admin — they are never emailed. The module’s two emails — “a submission has been assigned to you” and “a submission is overdue” — carry no answer from the form, only a link. An overdue reminder is sent at most once per file, and only to the person assigned.
The deadline is counted in hours after the submission arrives. Zero means no deadline: better none than an invented one, which people quickly learn to ignore.
The submission’s own status — active, spam, trash — is untouched: resolving a file trashes nothing.
The full account of the rules is in
workflows-internes.md.
Publishing a list of submissions
SolisForms Pro. A view can become a portal: a searchable, filterable, sortable, paginated list, with a targeted export, approval before publication, and private links that expire. The setting sits at the bottom of the Views screen, under “Portal”.
Left off, the view behaves exactly as before.
Approving is not a submission status. An entry can appear in one directory and stay hidden in another, and rejecting a publication trashes nothing. Conversely, a submission moved to the trash leaves the portal at once, whatever was decided about it.
Four states: awaiting review, published, rejected, hidden. A rejection goes back through “awaiting review” before it can appear — publishing in one click what you had set aside is the surest way to do it by accident. Hiding is a temporary withdrawal, and the journal keeps the difference.
You choose which fields are searchable, filterable and sortable, among those the view already exposes: a field the view does not show answers no criterion. A field added to the form later is never indexed automatically.
Search matches the start of a word: “durand” finds “Boulangerie Durand”, but “oulangerie” finds nothing. Accents are ignored on both sides.
Moderating is a right of its own. It can be granted without granting form management, refunds or subscriptions, and it is limited to a person’s own forms when they only manage their own. The screen is under SolisForms → Moderation.
A private link opens the portal to someone who has no other way in, for one hour to thirty days. It is read-only, never shows anything awaiting review, exports only if you explicitly allowed it, and can be revoked at any time. The link is shown once: copy it then, it is kept nowhere.
The export carries exactly the criteria on screen and stops at the portal’s columns: no attachment, no internal note, no unexposed field. Past ten thousand rows it is refused rather than truncated.
A portal that is not open to everyone is neither indexed by search engines nor cached.
The full account of the rules is in
portail-soumissions.md.
Wiring a form to Zapier
SolisForms Pro. The builder offers a Zapier panel. Turned on, the form becomes a “New submission” trigger in Zapier, and every answer travels to your Zaps — Google Sheets, Notion, a CRM, whatever you like.
Zaps are connected from Zapier, not from WordPress: you pick the form from a dropdown and Zapier subscribes itself. The panel’s switch only decides whether the form appears in that dropdown at all.
What you set here is what the site decides: the condition to send — the same rules as conditional display — and the fields that leave. Leave everything unticked to send them all, as the webhook does; tick a few when the Zap leads somewhere other than your own site.
Passwords, payments, files and signatures never leave, whatever is ticked.
The example Zapier shows while you build a Zap is made up. It is never a real answer — Zapier keeps that example inside the Zap’s configuration, and a real submission would stay there after being erased from your site.
Every delivery is recorded in the submission’s delivery log, with its result. A failed delivery is retried three times; a Zap that is switched off unsubscribes itself.
On the Zapier side you need your site address and a WordPress application password — created from your user profile, revocable without touching your own password.
The full account of the rules is in
integration-zapier.md.
Copying attachments to cloud storage
SolisForms Pro. The attachments you allow are copied into a folder of your Google Drive, OneDrive or Dropbox.
Once for the site: open SolisForms → Cloud storage. All three providers are listed. For the one you use, create an app with them, paste its client id and secret, set a root folder, then click Connect. The screen shows the redirect URL to register on the app — the same one for all three.
With Google the root folder must be created by the plugin: the permission requested only grants access to files it creates itself, which is precisely the point — it cannot read anything else in your Drive.
For each form: the builder offers a Cloud storage panel. Tick the file fields to copy — nothing is copied while nothing is ticked, and that is deliberate: a document is not sent to a third party by default.
The folder template files things as they arrive: {form}/{year}/{entry}
creates one folder per form, year and answer. Available tokens are {form},
{entry}, {year}, {month}, {day} and {date}.
The size limit depends on the provider — 4 MB on OneDrive, 5 MB on Google Drive, 150 MB on Dropbox — and the screen shows it. A larger file is not attempted: it would be refused after being transferred.
No public share is ever created. The stored link opens the file in your own space and still asks you to sign in. On Dropbox there is no link at all: getting a clickable address would mean creating a share, and the module refuses to.
Remote deletion is optional and off by default: deleting an answer here does not delete the document over there unless you ask. Either way, the local deletion never waits for the provider.
The submission detail shows one row per attachment with its state and location. “Skipped” means nothing was attempted — missing file, too large, or field not ticked; “failed” means the provider refused.
The full account of the rules is in
integration-stockage-cloud.md.
Sending answers to a Google spreadsheet
SolisForms Pro. Every answer appends one row to a tab of a Google Sheets spreadsheet.
Once for the site: open SolisForms → Google Sheets, create an app with Google, paste its client id and secret, then click Connect. The screen shows the redirect URL to register on the app.
Google offers no permission limited to a single spreadsheet: writing into one you name requires access to every spreadsheet of that account. Two ways to stay narrow, both offered on the screen: let the plugin create the spreadsheet from there, or dedicate a Google account to this integration.
For each form: the builder offers a Google Sheets panel. Paste the spreadsheet URL — the one in your address bar will do — pick the tab from the list, then add the columns in the order you want them.
Order is the mapping, not names. The first column you add becomes column A, the second column B. Reorder later and new answers follow the new order, but rows already written stay put: reorder while the sheet is empty, or start a second one.
If you delete a field from the form, its column stays, empty. Removing it would shift every following column and the older rows would end up under the wrong headers. The screen flags the empty column; map another field to it, or leave it.
Twenty-six columns at most. File, signature, payment and password fields are never sent.
Write a header row puts the field labels above the first answer, once per tab.
The reference column is optional. It adds a technical id per answer. Its only use: if Google accepts a row but its reply is lost, the retry may write a duplicate — sorting on that column makes it visible. Without it, two identical rows are indistinguishable.
Answers are never interpreted. A visitor typing =IMPORTXML(…) into a text
field gets text in your spreadsheet, not a formula that runs.
A Google outage never blocks the answer: it is stored and notified first, the spreadsheet row comes after. The submission detail shows its state and the range written.
The full account of the rules is in
integration-google-sheets.md.
Sending answers to HubSpot
SolisForms Pro. Every answer creates or updates a HubSpot contact.
Once for the site: open SolisForms → HubSpot, create a public app in your HubSpot developer account, paste its client id and secret, then click Connect. The screen shows the redirect URL to register on the app.
For each form: the builder offers a HubSpot panel. Pick the email field first — it is required: HubSpot uses it to recognise an existing contact, and that is what keeps a retry from creating a duplicate. Then map the properties you want to fill.
Nothing leaves that the mapping does not name. File, signature, payment and password fields never leave, even when mapped. And an empty value is not sent: on HubSpot, a property sent empty erases the one on the record.
The contact and the list are not the same thing
The contact is sent as soon as the form is connected: somebody wrote to you, and the CRM is where that gets noted.
Adding them to a static list only happens with consent. To offer it, add a Consent field to your form, pick it in the panel, and enter the list id — the number in the list URL in HubSpot.
Only a Consent field will do, not a plain checkbox: it alone stores, with the answer, the exact wording that was accepted and when. A plain checkbox records a yes, and a yes without the wording it approved proves nothing.
With no consent field set, nobody is ever added to a list.
And consent is frozen at the moment of the answer. Ticking the box yourself in the answer screen adds nobody, and resending keeps the original consent. That is deliberate: a consent the operator can add afterwards is not a consent.
Tags
HubSpot has no tags. The closest thing is a multiple-checkbox property: pick one, give your values separated by commas, and they are written on every record. Each value must already exist as an option of that property, or HubSpot refuses the contact.
If something is missing
A free portal has no lists: the site still connects, still sends contacts, and the connection screen says list access was not granted. Nothing else is affected.
The answer detail shows the delivery state, the contact created, the consent recorded and whether the list membership happened. A HubSpot outage never blocks the answer: it is stored and notified first.
The full account of the rules is in
integration-hubspot.md.
Sending answers to Pipedrive
SolisForms Pro. Every answer creates or updates a person, then opens a lead attached to them.
Once for the site: open SolisForms → Pipedrive, create an app in the Pipedrive developer hub, paste its client id and secret, then click Connect. The screen shows the callback URL to register on the app.
For each form: the builder offers a Pipedrive panel. Two fields are required: the name — Pipedrive refuses a person without one — and the email, which is how an existing person is found again. Without the email, every answer would add one more person to your database.
You can also map a phone, an organisation name, and as many custom fields as your account carries. The panel offers them: their keys are forty-character strings nobody types from memory.
Nothing leaves that the mapping does not name. File, signature, payment and password fields never leave. An empty value is not sent: an empty value erases the one on the record.
The lead
Its title follows a template: {form}, {name}, {email} and {entry} are
replaced, and the panel previews it.
Pipedrive has no pipeline for leads — a pipeline belongs to a deal, and leads live in their own inbox. What routes a lead is its owner and its labels: the panel offers both, read from your account.
The reference field is optional. It writes a technical id on the lead. Its only use: if Pipedrive accepts a lead but its reply is lost, the retry may open a second one — searching that reference makes it visible.
If something is missing
The answer detail shows the organisation, person and lead created, with links into Pipedrive. On failure, the connection screen says how far the delivery got: knowing the person already exists changes what there is to fix.
Resending opens a second lead. The person is updated, but Pipedrive cannot replace a lead. The button says so before the click.
A Pipedrive outage never blocks the answer: it is stored and notified first.
The full account of the rules is in
integration-pipedrive.md.
Sending answers to ActiveCampaign
SolisForms Pro. Every answer creates or updates a contact.
Once for the site: open SolisForms → ActiveCampaign, then copy the API URL and key your account shows under Settings → Developer. Click Test connection.
The URL must be an https address on ActiveCampaign’s own domain: anything else is refused rather than called, because a key sent to the wrong host is a lost key. The key is never displayed again once saved.
For each form: the builder offers an ActiveCampaign panel. The email field is required: it is how an existing contact is recognised, and what keeps a retry from creating a second one. You can also map first name, last name, phone, and as many custom fields as your account carries.
The contact and the marketing are not the same thing
The contact is sent as soon as the form is connected: somebody wrote to you.
Subscribing to a list and applying tags only happen with consent. To offer it, add a Consent field to your form and pick it in the panel.
On ActiveCampaign a tag counts as marketing: it commonly starts an automation, which means emails. So it waits for the same agreement a subscription does — a difference from HubSpot, where a tag is only a value on a record.
Only a Consent field will do, not a plain checkbox: it alone stores, with the answer, the exact wording that was accepted and when.
With no consent field set, no list and no tag is ever applied. The panel warns you if you set one without the other.
And consent is frozen at the moment of the answer. Ticking the box yourself in the answer screen subscribes nobody.
If something is missing
The answer detail shows the contact created, the consent recorded, and whether the subscription and tagging happened. A list failure never costs the contact.
Resending updates the contact without duplicating it — but if consent was given, the list and tags are applied again, which restarts the automations hanging off them. The button says so before the click.
Disconnecting does not revoke the key: it keeps working until you delete it in your ActiveCampaign account.
An ActiveCampaign outage never blocks the answer: it is stored and notified first.
The full account of the rules is in
integration-activecampaign.md.
Subscribing to a Mailchimp audience
SolisForms Pro. Every consenting answer subscribes or updates a member of an audience.
Once for the site: open SolisForms → Mailchimp, register an app in your Mailchimp account (Account → Extras → Registered apps), paste its client id and secret, then click Connect. The screen shows the redirect URL to register on that app.
For each form: the builder offers a Mailchimp panel. Three settings are required, all of the same rank: the audience, the email field, and the consent field.
Nothing is sent without consent
This differs from HubSpot and ActiveCampaign, where the contact always went. Mailchimp is the mailing list: adding someone to it is subscribing them. A send “without the list” would mean nothing.
So add a Consent field to your form and pick it. Only that field will do, not a plain checkbox: it alone stores, with the answer, the exact wording that was accepted and when — which is precisely what you would be asked to produce.
Until the three settings are in place, the panel warns you that no answer will leave.
Double opt-in
By default, Mailchimp emails the person to confirm. That is the recommended setting, and the connection screen shows how many confirmations are outstanding — a number that never falls means those emails are not arriving.
You can subscribe without confirmation, but you answer for it: nobody checks the address, a typo subscribes a stranger, and the consent you hold names someone else.
Merge fields and tags
Merge fields belong to the audience you pick, and the panel reads them for it. The email is not mapped twice, and an empty value is not sent: it would overwrite the member’s.
Tags are typed by name, comma separated. Mailchimp creates the ones that do not exist yet.
If something is missing
The answer detail shows the member created, their real status at Mailchimp — subscribed, awaiting confirmation, unsubscribed — and whether the tags were applied.
Mailchimp refuses to re-subscribe someone who unsubscribed, bounced or reported a complaint. The screen explains this rather than letting you hunt for a broken setting: it is their decision, and only they can come back.
Resending subscribes nobody: an existing member keeps the status they chose, and the resend only updates their fields.
Disconnecting revokes the token. If that call fails, the screen asks you to remove the app in your Mailchimp account: this token does not expire.
A Mailchimp outage never blocks the answer: it is stored and notified first.
The full account of the rules is in
integration-mailchimp.md.
Writing to an Airtable base
SolisForms Pro. Every answer writes a row into an Airtable table, to feed an operational tracker or an internal portal.
Once for the site: open SolisForms → Airtable, create a personal access
token at airtable.com/create/tokens with the data.records:write and
schema.bases:read scopes, give it access to the bases involved, and paste it.
That is all: the token does not expire and there is nothing to renew.
The screen also offers an OAuth app. It is only worth it when the token must not belong to one person’s account — and it needs upkeep the token does not.
For each form: the builder offers an Airtable panel. Pick the base, then the table, then map your fields to the columns.
Set a merge key, or you will get duplicates
This is the setting that matters most, and the only one whose absence does not show up straight away.
Without a key, every answer creates a row. If Airtable’s reply is lost in transit, SolisForms retries — and the base ends up with two identical rows, with nothing to flag it.
With a key — the email address, usually — Airtable looks for the row carrying the same value: it updates that one, or creates one if there is none. The column must be mapped, and of a type Airtable accepts; the panel only offers those.
The SolisForms → Airtable screen shows how many rows were created rather than merged. That is the number to watch when a base fills up.
Columns are safe to rename
SolisForms stores each column’s internal id, not its name. Renaming a column in Airtable therefore breaks nothing.
What does break it is deleting one, changing its type, or removing an option from a select. Airtable then refuses the whole row, and the answer’s screen tells you to reopen the panel — retrying would not help.
What SolisForms converts, and what it leaves out
Values are adapted to each column’s type: an amount typed 1,250.50 becomes a
number, a date 05/10/2026 becomes a date.
Anything that does not convert is left out rather than guessed: Airtable refuses the whole record for one bad field, and losing a column beats losing the answer.
An empty value is not sent either: it would wipe what the row already held.
Passwords, payments, files and signatures never leave, whatever they are mapped to.
What is not offered
No attachments, no links to other tables, no computed columns: Airtable would refuse them. No reading either — a form writes, it does not keep the base.
An Airtable outage never blocks the answer: it is stored and notified first.
The full account of the rules is in
integration-airtable.md.
Creating a Notion page
SolisForms Pro. Every answer creates a page in a Notion database, turning a submission into a working file.
Once for the site: open SolisForms → Notion, create an internal integration in your Notion settings, paste its token — then, in Notion, share each database with that connection. This last step is the one everyone forgets: a Notion integration sees nothing until you share something with it, and the panel will list no database at all.
The screen also offers a public integration (OAuth). It has a serious drawback: Notion ends an authorisation 180 days after it was granted, and renewing does not push that date back. The site would stop writing after six months. The internal token has no such limit.
For each form: the builder offers a Notion panel. Pick the database, then map your fields to its properties. The title is required: without it Notion shows “Untitled”, and a database of those cannot be sorted.
Set a key property, or you will get duplicates
Notion cannot write the same page twice: every send creates one. If Notion’s reply is lost in transit, SolisForms retries — and you end up with two identical pages, with nothing to flag it.
Pick a property that identifies the person — the email address, usually. SolisForms then looks for the page carrying the same value and updates it, or creates one if there is none.
The SolisForms → Notion screen shows how many pages were created rather than updated. That is the number to watch when a database fills up.
Select lists do not grow on their own
Notion has a dangerous habit: writing a value that does not exist into a select property raises no error — it adds the option to your database.
On a public form that would let any visitor add whatever they like to your lists. SolisForms prevents it: a value matching no existing option is simply left out.
If you add an option in Notion, reopen the form’s panel so it comes through.
Properties are safe to rename
SolisForms stores each property’s internal id, not its name. What does break it is deleting one, changing its type, or removing the database share. The answer’s screen tells you so — retrying would not help.
What is not offered
No page body content, no files, no relations to other databases, no computed properties. No reading either — a form opens a file, it does not keep the workspace.
A Notion outage never blocks the answer: it is stored and notified first.
The full account of the rules is in
integration-notion.md.
Putting the appointment in your calendar
SolisForms Pro. A confirmed booking creates an event in Google Calendar or Outlook; cancelling it removes the event.
This module needs the slots one: it writes nothing without an appointment, and the panel only appears on a form that takes them.
Once for the site: open SolisForms → Calendars, register an application with Google or Microsoft, paste its client id and secret, authorise — then pick the calendar. That last step is required: SolisForms never guesses the main calendar, which is often someone’s personal one.
For each form: the Calendar panel picks the provider, the event title and the fields repeated in its description.
Daylight saving shifts nothing
This is the trap in every appointment module, and it is handled. A slot booked in January for a summer date happens at the announced time, not an hour later: SolisForms sends the exact instant, not a local time the calendar would have to reinterpret.
Nobody is invited unless you ask
If you add the visitor as an attendee, Google or Microsoft will send them an invitation from your account — a second message, after the one SolisForms has already sent.
The setting is therefore off by default. Turn it on if you want the person to receive your calendar’s invitation.
What the calendar will show
Only the fields you name, one by one. A calendar is shared and an appointment stays visible there for a long time: “every answer” has no place in it.
The title accepts {form} and {field:id}, because a calendar is read at a glance
and thirty lines of “Appointment” tell nobody anything.
Passwords, payments, files and signatures never leave.
Cancelling, and what to watch
Cancelling the booking removes the event. If that removal fails, the answer’s screen says so — and that is the message not to miss: the appointment is still in your calendar, and nobody is coming. You then have to remove it by hand.
Deleting an answer cancels nothing: the event stays in the calendar, because someone may still have meant to keep it. Cancelling the booking is what removes it, and only that.
What is not offered
SolisForms does not read your availability from the calendar, does not handle recurrence, and does not pick up an appointment you moved by hand: the site remains the source of the slot, the calendar reflects it.
The full account of the rules is in
integration-calendriers.md.
Announcing in a Microsoft Teams channel
SolisForms Pro. A card appears in a Teams channel when an answer arrives, when a case is assigned, or when a due date passes.
Teams incoming webhooks no longer exist
If you go looking for “connector” or “incoming webhook” in Teams, you will not find them: Microsoft disabled those in May 2026.
Once for the site: in Teams, open the channel, choose Workflows, pick “Post to a channel when a webhook request is received”, and paste the URL it gives you into SolisForms → Microsoft Teams. Then click Send a test card: a URL that answers is not the same as a URL that posts, and only a message appearing proves it.
That URL is the authorisation: anyone holding it can write to your channel. It is stored encrypted and never shown again.
For each form: the Microsoft Teams panel picks which announcements you want, the card title, and the fields it shows.
Three announcements, ticked separately
An answer arriving, a case being assigned, a due date passing. A team processing cases often wants the second without the first.
The last two need the Internal processing module.
What the card shows
The fields you name, one by one. A team channel is read by people who are not all recipients of every answer; “every answer” has no place in it.
The card’s button opens the answer in the admin, and always asks for a login: received by mistake, it shows nothing.
Passwords, payments, files and signatures never leave.
What a visitor cannot do
Teams renders part of Markdown in cards, links included. SolisForms therefore defuses anything coming from an answer: nobody can drop a clickable link into your channel by filling in your form.
If the channel goes quiet
That is the symptom of a deleted workflow, or one whose URL has changed. SolisForms notices on the first refusal and suspends the connector rather than retrying forever; the screen says so in red.
Recreate the workflow in Teams and paste the new URL: the suspension lifts. If you would rather resume without changing the URL, the Resume button also queues the missed announcements again.
The full account of the rules is in
integration-microsoft-teams.md.
Writing the invoice into your accounting
SolisForms Pro. When a payment goes through, a customer and an invoice are written into Xero or QuickBooks Online. One invoice per payment.
Once for the site: create an application in your accounting, paste its client id and secret into SolisForms → Accounting, register the redirect URL shown on the screen, then authorise. Click Check connection afterwards: it does not answer “fine”, it answers which books you write to. Make sure that is the right company before any form writes into it.
For each form: the Accounting panel picks the service, the kind of document, and the fields holding the customer’s name and email.
Draft or posted invoice
Draft is the default. In Xero it creates no accounting entry and appears in no report: your accountant reviews it and approves it.
QuickBooks has no draft. Its API cannot create an invoice that does not post: an invoice created enters your books immediately. A form pointed at QuickBooks therefore writes nothing at all until you choose “Posted invoice”, knowing that every payment will enter your accounting.
That silence is deliberate, and the screens say so rather than letting you discover it through missing invoices.
Nothing is recalculated
The lines, the discount, the tax and the total come from the order as it was shown and charged, never from the form configuration, which may have changed since. An invoice that does not match the payment is an accounting error, not a display detail.
If the lines do not add up to the amount taken, nothing is written: an invoice nobody can reconcile is worse than a missing one.
A discount stays a line of its own, with its coupon code. Shaving it off the prices would have balanced the invoice by making it lie about its contents.
If tax was charged
The module tells your accounting whether the prices included it, but your accounting applies its own rate: a form’s tax rate matches no tax code at your provider. That is one more reason to stay on draft, where someone reads the figure before it enters the books.
With no tax charged, none is added — your accounting will not apply its default rate to an order that carried none.
The reconciliation screen
It does not list “what was sent”, but what was taken in and is not in your books. That is the number to bring to zero before a close, and every reason is spelled out there.
It is also the only place an invoice can be written again — not the detail of an answer. The detour is deliberate: look in your accounting first, because writing again without looking means accepting a second invoice in it.
What SolisForms will never do
It cancels nothing. Deleting an answer here does not remove the invoice from your books: an invoice is cancelled by a reverse entry, in your accounting, and that is not decided from a forms screen.
It reads nothing either: no data comes back from the accounting into the site.
The full account of the rules is in
integration-comptabilite.md.
Stopping the same answer twice
SolisForms Pro. The Uniqueness panel refuses or flags an answer already received, on a key you pick: an address, a membership number, a combination of fields.
This is not anti-spam
Anti-spam asks whether this is a robot. This rule asks whether this person has already answered. The difference matters, because the two are wrong in different ways: an over-eager anti-spam loses a message; an over-eager uniqueness rule stops someone from signing up, and there is nothing they can do about it.
That is why the comparison is exact, and why the default is to flag.
Picking the key
One to five fields. Their values, end to end, form the key; two answers giving the same key are the same person as far as the rule is concerned.
Leading and trailing spaces and letter case are ignored — Camille@Exemple.fr
and camille@exemple.fr are the same address. Nothing more:
jean.dupont@ and jeandupont@ stay two people, because removing dots would
merge two distinct mailboxes at most providers.
Files, signatures, payments and passwords cannot be part of the key: none of them repeats identically. Nor can calculated fields — their formula can change, and every key already stored would stop matching.
Refuse or flag
Flag records the answer and marks it: you see it on the Duplicates screen and on the submission detail. Refuse rejects it.
Start with flagging. It is the only way to see what the rule catches before it turns someone away.
The message shown on a refusal says neither when nor by whom the first answer came in: on a public form, that detail tells anyone trying addresses at random what they wanted to know.
The window
In days. Zero means forever — not the absence of a rule, but the strictest
one. 365 allows one answer per person per year.
Letting someone through again
Trash their answer, mark it as spam, or delete it: the key is released and they can answer again. Restoring from the trash, however, does not take the key back.
What SolisForms does not keep
The compared value. Only a fingerprint is stored, and it cannot be reversed. To read what links two answers, open them: the value is there, in its place, and is deleted with them.
The full account of the rules is in
unicite-antidoublon.md.
Sending an SMS or a WhatsApp message
SolisForms Pro. Three transactional messages: confirming an answer, confirming a booked slot, and the resume link of an abandoned form.
Once for the site: open SolisForms → SMS and WhatsApp, paste the account SID and auth token from your Twilio console, set the sender — a number you own there — then Test the account. The test reads your account without sending a message, so it costs nothing.
For each form: the builder offers an SMS and WhatsApp panel. Pick the phone field — a form sometimes carries two, the person’s and their company’s, and the module does not guess — then the default country, which is only used for numbers typed without a country code.
Then write the message for each trigger. Insert a value with
{field:id}. The panel counts segments while you type: an SMS is billed per
160 characters, or per 70 as soon as one character falls outside the GSM
alphabet. “é” and “à” are inside it; “ç” and the typographic apostrophe “’” —
the one your word processor substitutes without saying so — are not, and they
double the price.
A message that is too long is refused, not shortened. What would be cut is the end: the link, or the time of the appointment.
The nature of the message decides the consent. Transactional: nothing more, the consent is in the gesture. Marketing: a ticked box is required, chosen in the panel — and without it, nothing leaves.
Anyone who replies STOP receives nothing again, even if they tick a box afterwards. The opt-out list lives on the same screen: you check a number, add one, remove one. You do not read it — it holds fingerprints, not numbers.
One number receives at most three messages per hour, whatever the reason.
Passwords, payments, files and signatures never leave.
The submission detail shows one row per trigger with its state. “Accepted by Twilio” does not mean “received”: the carrier delivers, or not, and the site cannot see it. The Send again button costs another message.
The full account of the rules is in
integration-twilio.md.
Sending answers to Salesforce
SolisForms Pro. Every answer becomes a Lead or a Contact.
Once for the site: open SolisForms → Salesforce, pick the environment —
production, sandbox, or your own My Domain —, paste the consumer key and secret
of a connected app created in Salesforce Setup, then click Connect. The
screen shows the callback URL to register on that app; it must match character
for character. The app must grant the api and refresh_token scopes — without
the second, the connection dies at the end of the session, with no message.
For each form: the builder offers a Salesforce panel. Pick the object,
then map the fields — the panel fetches the real list from your org, custom
fields included. A Lead needs a last name and a company, a Contact
only a last name; the panel warns while a required field is unmapped.
The External ID field is worth a minute. Create a text field ticked “External ID” in Salesforce, name it here, and every send becomes a write by reference: a retry after a lost reply updates the same record instead of adding a second. It is the only way to rule that out — matching on email looks before writing, which leaves a gap.
You can also add the record to a campaign (its fifteen or eighteen character id), set a condition, and choose whether two answers with the same email update one record.
Passwords, payments, files and signatures never leave, whatever is mapped.
A failed send is retried three times, then stops. A definitive refusal — missing required field, validation rule — is not retried: it would be refused the same way. The submission detail shows the state, the reason, the reference, the campaign state, a link to the record, and a button to send again.
If adding to the campaign fails while the record went through, that is said separately: the record did arrive.
The full account of the rules is in
integration-salesforce.md.
Sending answers to Zoho CRM
SolisForms Pro. Every answer becomes a lead in Zoho CRM.
Once for the site: open SolisForms → Zoho CRM, pick your account’s data centre, paste the client id and secret of a “Server-based” application created in the Zoho API console, then click Connect. The screen shows the redirect URL to register on that application — it must match character for character.
The data centre is not a detail: an account created in Europe lives on zoho.eu
and does not exist on zoho.com. Zoho then answers “invalid token” without ever
saying the problem is geographical.
For each form: the builder offers a Zoho CRM panel. Turn it on and map
the fields — the panel fetches the real list of fields from your CRM, custom ones
included. The Last name field (Last_Name) is mandatory: without it Zoho
refuses the whole record.
You can also set a fixed lead source, a condition — the same rules as conditional display — and choose whether two answers carrying the same email update one lead or create two. Matching on email is the default, and it is also what makes sending again harmless.
Passwords, payments, files and signatures never leave, whatever is mapped.
A failed send is retried three times, then stops. The submission detail shows the state, the reason when it failed, a link to the lead in Zoho, and a button to send again once the cause is fixed. The Zoho CRM screen gives the overall count and the last failures.
Disconnect revokes the authorisation at Zoho, then erases everything here — tokens, secret, client id.
The full account of the rules is in
integration-zoho-crm.md.
Picking up a form you started
SolisForms Pro. The builder offers an Abandonment recovery panel. Switched on, a visitor who has started filling in can be offered to keep what they typed and be emailed a link to finish later.
Nothing happens without an explicit yes. The box is never pre-ticked, and clicking “next” or typing an address does not count as agreeing. Refusing leaves the form fully usable: no draft kept, no reminder, no browsing data.
The wording you write is stored with a version number alongside the consent. Knowing someone agreed says nothing if you do not know what they agreed to — so change the version whenever you change the wording. The default wording is an honest starting point, not legal advice: align it with your privacy policy.
One reminder per draft, and no more — including “send now” from the submission screen. It carries the form name, the deadline and two links: one to resume, one to erase everything at once. No answer, no browsing data, no summary.
What is kept about the journey is deliberately thin: where the visitor came from (without the query string), the campaign parameters of the entry page, the internal pages already seen, the step they stopped at, and first and last activity. Nothing else — no IP, no browser, no field content, and nothing from other sites.
Erasing is immediate and complete, from the email or from the submission screen. Without JavaScript, nothing is saved automatically and no consent box is shown; the manual “save and resume” button still works.
The full account of the rules is in
abandon-reprise.md.
Taking appointments
SolisForms Pro. The builder offers an Appointments and slots panel, and a new Appointment slot field where the visitor picks a time.
Everything is decided in the site’s timezone. A nine o’clock slot is nine o’clock for whoever is receiving; deciding in the visitor’s timezone would show different opening hours depending on where you look from.
A place is taken by an insertion, not by a count. Counting bookings and then inserting if the count allows leaves a window where two simultaneous clicks on the last place both see “one free” and both book. Capacity here is carried by a database constraint, so it cannot be exceeded.
A full slot disappears from the list, unless a waiting list is kept. Promoting someone from it is deliberate: they may have booked elsewhere since, and a confirmation sent on its own would reach them without warning.
Cancellation goes through a signed link in the confirmation email, and frees the place at once. Set the cancellation deadline together with the notice period: a 24-hour cancellation deadline with no notice period means the first slots offered are already past cancelling.
With a payment on the form, the place is taken only once the payment is confirmed. With email verification, it waits for the address to be confirmed — a place held by an address nobody has proven to own is a place lost for everyone.
The full account of the rules is in
reservations-creneaux.md.
Confirming an address
SolisForms Pro. The builder offers an Email verification panel in the form settings. Switched on, the visitor receives a link and must open it before the form’s consequences take effect.
The submission is always saved. Refusing it until confirmation would lose a request every time an email fails to arrive — and emails fail to arrive, for reasons that are neither the site’s nor the visitor’s. The entry is recorded as usual; only what follows from it waits.
Internal alerts go out immediately. A request must never stay invisible because an address was not confirmed. What waits is anything addressed to the mailbox being verified — and a member account, if the form creates one.
The link is valid for 24 hours, works once, and can be sent again at most three times a day. These are not settings: they protect the owner of the mailbox, who is neither the visitor typing the address nor the administrator configuring the form.
Only an email field can be verified. Sending a link to whatever someone typed in a text field would turn the form into a relay.
A refused link says only that it cannot be used, never why. Telling “expired” apart from “unknown” would tell anyone trying links at random what exists — and what has existed. The real state is on the submission, where you can also send the link again or revoke it.
The full account of the rules is in
verification-email.md.
Filling in without a connection
SolisForms Pro. The builder offers an Offline entry panel in the form settings. Switched on, answers are kept on the visitor’s device and sent once the connection comes back — useful on site visits, in basements, on trains.
Nothing reaches the server before the send: no server-side draft, no email, no tracking. The site learns of the entry only when it becomes a submission.
One draft never produces more than one submission. That guarantee lives on the server: the browser loses the answer at the exact moment the network drops, and cannot tell “never sent” from “sent, answer lost”. A random identifier is reserved before the submission is attempted, so two tabs or a queue that restarts cannot both get through.
What is never kept on the device: passwords, files, signatures and payments. They have to be filled again when the connection returns, and the builder warns you while you are still building rather than letting you find out afterwards.
On encryption, plainly. Drafts are encrypted on the device with a key that cannot be exported — not even by an injected script. That protects them at rest: a profile backup, a shared machine, a look in the inspector. It does not protect against a script running on your own site, which can use the key. And on a site served over plain HTTP, or in a browser without IndexedDB, nothing is kept at all: the form behaves exactly as usual rather than writing answers in the clear.
A kept draft is offered, never restored behind your back, and can be erased in one click. Drafts expire after thirty days at most; the limit can be shortened in the panel, never raised.
The full account of the rules is in
formulaires-hors-ligne.md.
One question at a time
SolisForms Pro. The builder offers a Conversational form panel in the form settings. Switched on, the form is presented one question per screen, with a progress bar and Next/Previous buttons.
The split happens on the server, and the markup is that of an ordinary multi-page form. That is the whole point: validation before leaving a screen, skipping screens emptied by conditional logic, focus handling and the spoken progress all come from the same code that has run multi-page forms for years.
Without JavaScript, the form still works. Every question is in the page, the step buttons stay hidden, and it submits in one go.
How the screens are built:
- A block of text or a section heading is not a question. It joins the question it introduces; at the end of a page, where it introduces nothing, it gets its own screen.
- A payment field is always presented last. Asking for money before the questions are over is how you lose people.
- Page breaks stay boundaries: a form already split into steps keeps its steps, finely re-split.
- Hidden fields have no screen; they ride along on the first one.
Enter moves to the next screen, except in a text area where it starts a new line, on a button or a link where it activates them, and on the last screen where it submits. Shift+Enter is always left to the browser. If the visitor’s system asks for less motion, the transition disappears and scrolling becomes immediate.
A page with nothing but the form
Create a page, insert the form, then pick SolisForms — dedicated form page under Page Attributes. The theme’s header, menu and footer are dropped; the form and its shell are what remain.
It stays an ordinary page — same address, same permissions, same caching, same
language — and there is no iframe. A heading, an introduction, a logo and two
colours can be set in the panel; a colour that is not written as #rrggbb falls
back to the theme rather than being guessed at.
The full account of the rules is in
formulaire-conversationnel.md.
Measuring the answers
SolisForms Pro. The builder offers a Survey and quiz panel in the form settings, with three modes: a survey, an NPS question, or a scored quiz. Results appear under Reports, and export to CSV and PDF.
Pick the questions to analyse. A choice question is reported by option, a rating or number by average, median and distribution, and a free-text question by volume alone.
Free text is counted, never aggregated. A word cloud surfaces fragments of individual replies — a name, a town, a turn of phrase someone recognises — in a report that exists to avoid exactly that. The text stays in the submission, where whoever may read it can.
Five things are worth knowing before enabling it:
- A hidden question counts in nothing. Conditional logic is the source of truth: a question the visitor never saw enters neither the score nor the maximum. Two people down two branches stay comparable.
- Scores are frozen at submission. Editing a question, an answer or a pass mark never rewrites past results; it starts a new version, reported as its own series with the labels it had at the time.
- Small groups show a volume only. Below the privacy threshold — five responses by default, never under three — the breakdown is withheld, and so is the link to the submissions behind it.
- NPS needs the Recommendation field. A star rating starts at 1; the formula is defined on a 0–10 scale, and computing it on another would give a number that still looks like an NPS.
- Reports exclude spam, trashed and draft submissions, and marking a submission as spam removes it from the report at once.
Every chart is a table: the bar is a background in a cell that carries the figure. Nothing is lost to a screen reader, to printing, or to the PDF.
Exports carry exactly the filters shown and never an individual answer. The submissions export remains the explicit path to response data, with its own permissions.
The full account of the rules is in enquetes-quiz.md.
Creating member accounts
Paid extension. The builder offers a WordPress account panel in the form settings. A form can then create an account from a submission, or update the account of the visitor who is already signed in.
Map the fields you want carried over: the email address, which is required for a creation, then first name, last name, display name, and as many user metadata rows as you need.
No password ever travels through the form. The account is created with a random secret nobody reads, and WordPress sends its own password setup link, the same one it uses everywhere else. Adding a password field to the form would put that secret in the request, in the server logs, and in any notification the form sends.
Four things are worth knowing before enabling it:
- The role is locked down. Only
subscriberis offered. Opening the list further takes code, through a filter, and a role carrying a site-takeover capability stays refused even then — an account that can edit users is an administrator whatever it is called. - An email that already has an account fails silently. The submission is still saved, no second account is created, and the visitor is told nothing. Saying otherwise would answer “is this person registered here?” for any address anyone cares to try. You see the reason on the submission.
- Updating only ever touches the signed-in visitor. There is no mode that finds an account by email on an anonymous form: that is account takeover, not an update. Pair this mode with the Login required access rule.
- Deleting a submission never deletes the account. The member exists independently of the form that created them.
Each submission carries a WordPress account block showing what happened: the result, the account, the role granted, the fields applied and the reason for any failure. It names destinations, never the values written to them.
If a payment is attached to the form, no account is created until the payment is confirmed — an unpaid submission never gets recorded in the first place.
The full account of the rules is in
comptes-wordpress.md.
Reusing a form
From the forms list:
- Duplicate creates an independent copy.
- Export produces a JSON file.
- The import form, at the top of the list, recreates a form from such a file — including one from another site.
When in doubt
| Symptom | Where to look |
|---|---|
| Emails do not arrive | Delivery log on the submission; install an SMTP plugin |
| The form refuses every submission | Check its opening dates, and — with the SolisForms Pro add-on — its quota and required login |
| A required field blocks even though it is hidden | Not possible: a hidden field is not required. Check that the rule targets the intended field |
| The total shown differs from the amount charged | The server is authoritative; check the formula and the quantities |
| The signed receipt does not arrive by email | The email waits for the receipt: check the delivery log on the submission, and the “Signature and document” block for the state of the document |
| Statistics look low | Views are only counted for visitors with JavaScript enabled, so they understate reality |
