sandywp / plugins / contact-form-7-multi-step-module

Webheadcoder Multi-Step Forms for Contact Form 7

4.2 out of 5 stars. 4.2 49 reviews

Adds multi-page, multi-step forms to Contact Form 7.

Launch a sandbox with this plugin → No signup.
Ready in seconds.

v4.7 50,000+ installs WP 4.7+

your-sandbox.sandywp.com/wp-admin
Webheadcoder Multi-Step Forms for Contact Form 7 running inside a SandyWP sandbox

About this plugin

First released in 2013, Webheadcoder Multi-Step Forms for Contact Form 7 adds multi-step flows to forms by placing each step on a separate page, preserving submitted data between steps, and sending the completed email only from the designated step configured to send it.

See it in action at https://webheadcoder.com/contact-form-7-multi-step-forms/

Requires Contact Form 7 (5.2 or above) by Rock Lobster Inc. (Takayuki Miyoshi).

Usage

  1. Create one page or post for each step in your multi-step form process. If you have three steps, create three pages or posts. You will need their URLs when creating your forms.

  2. Create a Contact Form 7 form.

  3. Place your cursor at the end of the form.

  4. On the “Form” tab of the Contact Form 7 form, click on the button named “multistep”.

  5. In the window that opens, select “First Step” if this is the first step of your multi-step form. If this is the last step, select “Last Step.” All other checkboxes are optional.

  6. The Next Page URL is the URL that contains your next form. If this form is the last step, you can leave the URL field blank.

  7. Click “Insert Tag.”

  8. Save your completed form and place the form’s shortcode into the appropriate page or post you created in step 1.

  9. Repeat for each form in your multi-step form process.

  10. On the last step, you may want to send an email. Select “Send Email” in step 5. On the Mail tab, enter mail-tags as you normally would. For example, if your first form has the field your-email, you can include [your-email] in the Mail tab on your last form. Contact Form 7 may flag this because your-email is not displayed on the current form; you can safely ignore that warning.

Multistep Tag Options

  • Name – The name of this multistep form-tag. This is required, but is currently not being used.

  • First Step – Besides marking the first step of your multistep form, this allows any form to act as the first step and display when no previous data has been submitted. This is useful when you want some users to skip the first step.

  • Last Step – Besides marking the last step of your multistep form, this clears the data from users’ browsers. Once they submit this form, they will no longer see their data populate the forms.

  • Send Email – If this is checked the form will send an email like a normal Contact Form 7 submission.

  • Skip Save – If you use Flamingo or CFDB7 to save submissions to the database this prevents saving this form submission.

  • Next Page URL – This is the URL your users will go to after the form is submitted.

    [multistep multistep-123 last_step send_email skip_save “/thank-you”]

Additional Tags

[multiform "your-name"]

The multiform form-tag can be used to display a field from a previous step. Replace your-name with the name of your field. This is only for use on the Form tab, this tag will not work in the Mail tab.

[previous "Go Back"]

The previous form-tag can be used to display a button to go to a previous step. Replace Go Back with text you want to show in the button.

Messages Tab
When a visitor visits the fourth step in your multi-step form without completing the first step, the message “Please fill out the form on the previous page.” is displayed. You can change this for each form in the Messages tab.

What this plugin DOES NOT do:

  • This plugin does not support file uploads on every form. If you need to use file uploads make sure to place it on the last step.

  • This plugin does not load another form on the same page. It only works when the forms are on separate pages. Many have asked to make it load via ajax so all forms can reside on one page. This plugin does not support that.

PRO Version
If you expect to have a lot of data submitted through your multi-step forms, the Pro version may be able to help you better. The PRO version uses Session Storage so it is able to handle roughly 1,000 times more data for your multiple forms. In total it can handle about 5MB vs 4KB in the free version. Currently the Pro version REQUIRES the WordPress REST API and Contact Form 7 AJAX Submission to be enabled.

Another feature the Pro version offers is the ability to skip steps with the “Contact Form 7 – Conditional Fields plugin”. Learn more here.

Source Code

The human-readable source for this plugin’s minified JavaScript and compiled CSS is published at https://github.com/coreyt808/webheadcoder-multi-step-forms-for-contact-form-7, with the unminified files in assets-src/. To rebuild the generated files in resources/, use Node.js 24 and run composer install, npm ci, and npm run deploy.

External services

This plugin uses Freemius, an external service, for optional usage tracking and opt-in, licensing, account management, pricing, and purchase or upgrade functions. Freemius receives and processes information used for these functions. The free plugin remains usable if an administrator chooses “Skip” on the Freemius opt-in screen.

If an administrator opts in, the plugin can send the opted-in administrator’s first name, last name, and email address; the plugin’s version and state; the WordPress and PHP versions; the site language and website URL; and, when the administrator separately allows it, the list of installed plugins and themes.

Activating and maintaining a paid license sends the license and site or product information needed for license activation, account management, and update checks. A pricing or checkout connection is initiated only after an administrator explicitly selects a plugin-provided Upgrade or Purchase link and proceeds through the Freemius SDK-managed flow.

Learn more about Freemius, its opt-in behavior, and its data practices. Use of the service is subject to the Freemius Terms of Service and Privacy Policy.

Questions

The Next button doesn’t show up

You still need a standard Contact Form 7 submit button on each step.

Add a submit tag like this:
[submit “Next”]

Also note: multistep is a hidden field. If content appears to disappear right after it, place the tag at the end of the form (or add a line break after it).

I keep getting the “Please fill out the form on the previous page” message. What’s wrong?

This message usually means step-tracking data is missing. Check these first:

  1. Caching is blocking cookies. Exclude cookies named cf7* from cache behavior.
  2. Form step URLs do not match protocol or domain. Every step must use the same domain and protocol. For example, if your first page uses https://webheadcoder.com, your second page cannot use http:// or a subdomain.
  3. The first form is missing first_step in its multistep tag, for example:
    [multistep multistep-123 first_step “/your-next-url/”]

Why are no values being passed from one form to the next form?

If the page reloads on submit instead of using AJAX, Contact Form 7 JavaScript is not running correctly or the REST API is disabled.

Use Contact Form 7’s troubleshooting guide:
https://contactform7.com/why-isnt-my-ajax-contact-form-working-correctly/

How can I show a summary of what the user entered or show fields from previous steps?

[multiform “your-name”]
Use the multiform tag to display values captured on earlier steps. Replace your-name with your field name.

My form values aren’t being sent in the email. I get [multiform “your-name”] instead of the actual person’s name.

multiform is for the Form tab only.

For email content in the Mail tab, use standard CF7 mail-tags such as [your-name], not [multiform "your-name"].

Also confirm the last step includes the multistep tag.

Can I have an email sent on the first step of the multi-step forms?

Yes. Enable “Send Email” in the tag generator, or add send_email directly in the tag:
[multistep multistep-123 first_step send_email “/your-next-url/”]

My forms are not working as expected. What’s wrong?

Start with these checks:

  • Confirm every step includes a multistep tag.
  • Look for JavaScript errors from other plugins or themes that may block CF7 scripts.
  • Temporarily deactivate other plugins and test again to isolate conflicts.

Why “place your cursor at the end of the form” before inserting the multistep tag?

multistep is a hidden field and intentionally adds minimal spacing. If another element is placed immediately after it, that element may appear hidden.

To avoid this, insert multistep at the end of the form or add a line break after the tag.

4.2

49 reviews

  • 5 ★ 35
  • 4 ★ 4
  • 3 ★ 2
  • 2 ★ 1
  • 1 ★ 7

Ratings come from WordPress.org. SandyWP does not collect its own reviews.

sandywp / also on the shelf

Try another plugin

Spin up a real WordPress site in seconds.

Test plugins, build a demo, hand a client a link — then squash it and start again. No local setup, no Docker.