Field types
Every question in the builder has a label, a database field name (auto-derived from the label, editable via the ⋯ menu), an optional placeholder, and a Required toggle. Pick a type from the type dropdown on each question card:

Input fields
| Type | Stored value | Notes |
|---|---|---|
| Text | string | Default free-text input. |
| string | Validated server-side (is_email). Also the target for confirmation emails. | |
| Phone | string | Accepts +, digits, spaces, dashes, dots, parentheses; 7–25 characters. |
| Dropdown | string | One choice from the configured options. Submitted values are validated against the options. |
| Single Choice | string | Radio buttons. One choice, validated against the options. |
| Number | number | Numeric input. |
| Checkbox | array of strings | Multi-select. Each configured option renders its own checkbox; any subset can be picked. |
| Date | string (YYYY-MM-DD) | Native date picker; validated as a real calendar date. |
| Date Range | { start, end } (each YYYY-MM-DD) | Two native date pickers. "Require both start and end date" is configurable per field; when off, either date alone satisfies a required field. The end date must be on or after the start date. |
| Rating | number | A row of radio options from a configurable min to max (default 1–5), shown as numbers or stars. Validated against the configured range. |
| Textarea | string | Multi-line text. |
Static blocks
Static blocks display content but never collect or store data. They are excluded from submissions, exports, webhook payloads, and emails.
-
Text Block - a heading plus rich text (sanitized with
wp_kses_post). -
Image Block - one or more images from the media library; multiple images render as a gallery.

-
Section - a heading plus description that also splits the form into a new step. Everything from a Section onward (until the next Section, or the end of the form) becomes its own page, with a progress bar and Back/Next navigation on the frontend.

Options editor
Dropdown, Single Choice, and Checkbox fields share the same options editor: add one option per row. The option text is both the label shown to visitors and the stored value.