Skip to content
NovaSpark Docs v1.0.0
Live Demo Support

Build

Forms

Build contact forms, newsletter sign-ups and full account flows in the Elementor editor — no shortcodes, no field codes to memorise.

NovaSpark does not process form submissions. It lays them out. The actual work — validation, spam checks, sending mail, creating accounts — is done by software built for it, so every plugin and integration you already rely on keeps working.

FormPowered byYou need
ContactContact Form 7The Contact Form 7 plugin
NewsletterMailchimpMailchimp for WordPress, with your API key
Sign in, sign up, reset passwordWordPress itselfNothing extra

Two ways to build one #

Both produce the same markup, so you can move between them later without restyling.

The quick wayThe flexible way
WhatOne widget — NovaKit Contact Form,
NovaKit Newsletter or NovaKit Auth
NovaKit Form, with field widgets inside
LayoutRows you reorder, each a full, half or third widthAnything a container can do — nested columns, a field beside an image
Best forMost contact forms and sign-upsAnything the row grid cannot express

The rest of this page covers the flexible route, since it is the one with settings to explain. The quick widget exposes the same choices in one panel.

NovaKit Form #

Drag NovaKit Form onto the page from the NovaKit Form category. It arrives with a Fields container already holding Name, Email, Message and a Submit button — delete, reorder or add to them. The settings are on the widget, under Content → Form.

SettingDefaultAccepts
Powered By—Contact Form 7, Mailchimp Newsletter, WordPress Accounts, Custom Action
Form—Which form, audience or account flow receives this
Manage Fields AutomaticallyOnOn or off — Contact Form 7 only
When Signed InHide this formHide it, or show it anyway — accounts only

The form wraps the Fields container from the outside, so everything you set on that container — direction, gap, alignment, width — still arranges the fields exactly as you laid them out. Select it by clicking the space around the fields, or through the Navigator.

Pick a form before you build. Until you do, NovaKit Form renders its fields and submits nowhere. The panel says so in orange.

The field widgets #

Ordinary Elementor widgets. Arrange them however the layout needs.

WidgetRenders
NovaKit Field: TextText, email, phone, URL or number
NovaKit Field: TextareaA message box, or a prompt box
NovaKit Field: SelectA dropdown
NovaKit Field: ChoicesRadio buttons or checkboxes
NovaKit Field: AcceptanceA consent checkbox
NovaKit Field: DateA date picker
NovaKit Field: UploadA file attachment
NovaKit Field: HiddenA value the visitor never sees. Takes a dynamic tag, so a submission can carry the page it came from
NovaKit Form: SubmitThe button. Without it the form cannot be sent
NovaKit Form: MessageWhere the success or error text appears

Newsletter forms use NovaKit Newsletter Field instead, and account forms use NovaKit Account Field — both explained below.

A prompt box

Form: Textarea has a Behaviour section for chat and AI prompts. Everything in it is off by default.

SettingDefaultWhat it does
Grow With TextOffGets taller as the visitor types, from its Rows
Stop Growing AtEmptyThe height it stops at and starts to scroll, per device
Enter SendsOffEnter sends the form and Shift+Enter starts a new line. Phones keep Enter for new lines, as their keyboards have no Shift+Enter
Start CompactOffSmall until it is clicked, then it stretches smoothly. It stays open while it holds text, and while the visitor uses the rest of the form, such as a button or a dropdown beside it. Empty, it closes once they click outside the form
Compact Width, Compact HeightFull width, one lineIts size while small, per device
Open Width, Open Min HeightFull width, 7remIts size once open. With Grow With Text it can grow taller
Stretch FromStartWhich side it grows from: Start, Center or End
Duration, Easing350ms, SmoothHow it stretches
Preview Open In EditorOffShows it open while you set the sizes. Visitors never see this

Fill it from buttons with quick prompts.

Field names

Each field has a Field Name — what it is called in the submission and in your email. Leave it empty and it is taken from the label, which is usually right.

Two rules are enforced for you. Names must be unique within a form, so a duplicate is renamed rather than silently overwriting the other field. And a few names belong to WordPress — name, author, s — so a field called name becomes your-name, exactly as Contact Form 7’s own default does, and for the same reason.

Contact forms #

  1. Create the form in Contact Form 7Contact → Add New. Name it, save, and leave the form template alone — NovaSpark fills it in.
  2. Set up the Mail tabRecipient, subject, reply-to. That stays yours; NovaSpark only writes the field list between two markers in the mail body.
  3. Build the layoutA NovaKit Form with Powered By set to Contact Form 7, your form selected, and field widgets inside.
  4. Save the pageThis writes your field list into the Contact Form 7 form, so it validates what you actually built.

Why saving matters. Contact Form 7 validates against the field list stored on its own form, not the HTML that arrives. Saving the page keeps the two in step. Without it, the form renders but is checked against an older list.

A form you built by hand is never overwritten. NovaSpark only manages a form whose template is still empty or still the stock default. If you had already written one, it is left alone and the panel tells you so — that is not a failure, it is refusing to throw away your work. Edit the list in Contact Form 7 to match, point at a fresh form, or turn Manage Fields Automatically off and maintain it yourself.

Newsletter sign-ups #

  1. Connect MailchimpMailchimp for WordPress → Settings, paste your API key, save. That is the whole setup.
  2. Build the layoutA NovaKit Form with Powered By set to Mailchimp Newsletter, then pick an audience.
  3. Add the fieldsNovaKit Newsletter Field widgets, then NovaKit Form: Submit.
  4. SaveThe form record is created and your required fields written into it.

You pick an audience, not a form. Mailchimp for WordPress needs a form record to hang the audience on, so NovaSpark creates and maintains one behind the scenes. You never open its form editor. A form you did build there yourself still appears in the dropdown under its own name, and is never rewritten.

Merge tags

NovaKit Newsletter Field has no Field Name control, deliberately — the merge tag is the name. Its dropdown lists the tags your audience actually has, read from Mailchimp rather than typed from memory: EMAIL, FNAME, LNAME, PHONE and whatever else you have added.

Only EMAIL is required, and a wrong tag fails silently. A merge tag lives in your Mailchimp account, not on your site. Get one wrong and nothing errors — the value is simply dropped on the way, and nobody notices until someone asks where the first names went. That is why the list is read from the API.

Mailchimp collects an address as several values at once, so address-type merge fields are not in the dropdown. Collect them as separate text merge fields, or on a Mailchimp-hosted form.

Sign in, sign up and password reset #

These run on WordPress itself — no Contact Form 7 involved. Every authenticate and registration_errors filter still runs, so a security or two-factor plugin keeps working. What NovaSpark adds is that the visitor never leaves the page you designed.

Turn registration on first if you are building a sign-up form: Settings → General → Membership → Anyone can register. Without it the form renders but cannot create accounts, and the visitor only finds out after filling it in. The panel warns you, with a link to the setting.

Set Powered By to WordPress Accounts, then choose which flow this form is:

FlowNovaKit Account Fields to add
Sign inUsername or Email · Password · Remember me
RegisterUsername or Email · Email · Password · Confirm Password
Reset password — send the linkEmail
Reset password — set a new onePassword · Confirm Password

The two reset forms are not interchangeable, and this is the easiest thing here to get wrong. Recovery is two steps, often days apart. Send the link is what sits behind “Forgot your password?” and asks for an email address. Set a new one is what the emailed link opens, and asks for a new password twice. Put the second one behind “Forgot your password?” and the visitor is asked to choose a password before anyone has checked they own the account — the form has no key to work with, so it can only refuse.

You never type field names. There is one set of fields, and the flow decides what each is called when it arrives. A field with no meaning in its flow — Remember me on a sign-up form — simply does not render, and says so in the editor.

Account fields need a WordPress Accounts form. In a form powered by Contact Form 7 or Mailchimp — or outside a form altogether — they have no meaning and are left off the live page. The editor marks them in red and offers a Use WordPress Accounts button that switches the form for you; choose the flow next. The reverse is marked too: an ordinary field such as First name in an account form still shows, but WordPress does not save what is typed into it.

The password field changes the behaviour

On a sign-up form the Password field is optional, and whether you include it decides what happens:

With a Password fieldThe visitor chooses their own and is signed in immediately.
Without oneWordPress emails them a link to set a password. This is its default behaviour.

Add Confirm Password alongside and the two must match. Turning on Show/Hide Button on any password field cuts failed sign-ins on phones considerably.

Where the new password is chosen

The second half of a reset happens after the visitor leaves and comes back from their email. On the set a new one form, open Advanced → NovaKit Settings → Display Conditions → Edit Conditions and add an Include rule Account → Visitor followed a password reset link. Give the sign-in form the same rule as Exclude, and the page swaps cleanly.

That condition is a real check against WordPress, not a glance at the URL — an expired or forged link reports false and the form never appears.

Save the page, not just the block. That is what records where each form lives, and it is the step people miss. A Global Block on its own is a bare canvas with no address, so it can never be a destination. If no page carries a set a new one form, the emailed link is left as WordPress wrote it and lands on the default login screen.

The reset key never appears in the address bar. On arrival it is moved into a secure cookie and the URL is cleaned — a URL gets copied, shared, logged by the server and leaked through the referrer header, and that URL alone is enough to take over an account.

What signed-in visitors see

A sign-in form shown to someone already signed in is nonsense, so When Signed In defaults to hiding it. Give them something instead: a second container set to NovaKit Settings → Display → Visitor is signed in → Show, using the NovaKit User dynamic tags for their name, email and avatar.

Use Account URL → Sign out for the log-out link. A hand-typed logout URL is refused by WordPress, because it needs a security token only that tag can generate.

If the page has nothing else on it, use Page Settings → Signed-In Redirect instead and send them elsewhere entirely.

Test in a private window. As an editor you always see account forms, even when signed in — deliberately, since otherwise you could not see the form you are building.

Custom Action #

Custom Action sends a form wherever you say, with no form plugin in between. Use it for a chat box, a CRM or an automation. It has no email or storage of its own: for those, use Contact Form 7.

SettingDefaultWhat it does
Send ToEmptyA URL posts the fields there. Empty sends them to this site, where your code handles them
MethodPOSTPOST or GET
HandleEmptyA name your code tells this form apart by
Stay on PageOffSends in the background with no reload, and shows the answer in place
Minimum Sending Time (s)0.8With Stay on Page: the shortest time the form shows as busy
Sent Message, Failed MessageEmptyWhat the visitor reads. Empty uses the standard wording

With Stay on Page off, the browser leaves the page: to your URL, or back to this page with the result. With it on, nothing reloads, which is what a chat box needs. See Connect a chatbot for the code, and Hooks and filters for nk_form_custom_submit.

Putting forms in tabs #

Sign in and sign up on one page, as two tabs, is the common arrangement. Each tab’s panel in NovaKit Tabs is a container, so the forms go straight into it.

  1. Add NovaKit Tabs to the pageOne item per form: sign in, sign up, and the reset request.
  2. Build each form in its tabSelect a tab in the widget’s settings to show its panel, then drop the form into it.
  3. Hide the reset tab from the navigationSet Show in Navigation to off on that item.

That last step is what keeps “Reset password” out of the tab row. Resetting is not a peer of signing in and signing up — it is where you go when you cannot get in — so the row shows two options and the third is reached from a link inside the sign-in panel. The panel is still fully present, just unlisted.

Linking between tabs

Two ways to point a “Forgot your password?” link, both fine:

MethodUse it when
Account URL dynamic tagAnywhere. It resolves on its own to whichever page carries that form, opening the right tab if it is in one. Move the form later and every link follows.
A #slug linkFrom inside the same page. Type the item’s Deep-Link Slug with a # in front, and turn Deep Linking on.

Display Conditions will not work for this. They are evaluated on the server from who the visitor is, so they cannot respond to a click — swapping two forms that way would need a page reload.

A tab switcher is one arrangement, not a requirement. Separate pages work identically, and the Account URL tag still resolves between them.

Where the message appears #

Every engine’s message looks the same, and every form widget styles it in one place: Style → Message.

SettingDefaultAccepts
ShowAll MessagesOnly Problems hides the sent message and keeps errors. None hides them all, for when something else answers, such as a Mascot. Screen readers still hear them
PositionBelow on NovaKit Form, above on the quick widgetsAbove the form, or below it
Preview in EditorOffSuccess or Error — a sample to style by, never shown on the live page
Space From Fields20pxThe gap between the message and the fields, on whichever side it sits
Typography, Padding, Border, ShadowThe theme’sThe message box
Success / ErrorGreen / redText, background and border colour for each outcome

Set the colours when the form sits on a dark section: the defaults are tuned for light backgrounds. To put the message somewhere else entirely — beside the button, in another column — drop a NovaKit Form: Message widget there. It has the same style controls, and whatever you leave unset on it follows the form’s.

The wording stays the engine’s own, so a translation or rewrite in Contact Form 7 or Mailchimp is what visitors see. While a Contact Form 7, newsletter or Stay on Page form is sending, the submit button shows a small spinner in its own text colour.

Testing #

TestExpected
Submit a contact form emptyEach required field shows its own error, inline
Submit twice quicklyOne set of errors, not two stacked copies
Add a field, save, submit emptyThe new field is validated too
Newsletter, malformed address“Please provide a valid email address.”
Newsletter, real addressSuccess, and the subscriber appears in Mailchimp — usually as pending, which is its double opt-in
Sign in, wrong passwordBack on your page with an error, not the WordPress login screen
Sign up, mismatched passwordsAn error, with the username and email still filled in
Reset link used twice“That password reset link is not valid.”

After a successful reset the visitor is not signed in automatically. That matches WordPress: possession of a mailbox is enough to change a password, and a deliberate sign-in is the moment the new one is confirmed to work.

Failed attempts hand back what was typed — except passwords, which are never stored anywhere that outlives the request.

What NovaSpark owns #

NovaSparkThe engine
Layout and markupValidation rules
The field listMail settings, recipients, subject
Where the message sits, and its coloursThe message wording
Nothing elseSpam protection, integrations, stored submissions
Esc