Contact Form 7 Multi-Step Forms


I needed a contact form that spanned across multiple pages and in the end would send an email with all the info collected. This plugin adds onto the popular Contact Form 7 plugin to do just that.

Sample of this working is at

Requires the Contact Form 7 plugin, version 4.8 or above, by Takayuki Miyoshi.


  1. Create one page or post for each step in your multi-step form process. If you have 3 steps, create 3 pages/posts. You will need the urls to these when creating your forms.

  2. Erstelle ein Contact Form 7 Formular.

  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 popup, type in the current step and total steps in your multi-step process. For example, if this is the first form in a total of 3 forms, type in „1“ for Current Step and „3“ in Total Steps. If this is the last form in your process, type in „3“ for current Step and „3“ in Total Steps.

  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 or fill it in to redirect the user to some other page.

  7. Click „Insert Tag“

  8. Save your completed form and place the form’s shortcode into the appropriate Page/Post you created in step 1.

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

  10. Only the final step will send an email. To include fields from your other forms simply enter the mail-tags from the other forms. For example if your first form has the field your-email you can include [your-email] in the Mail tab on the last form.

Zusätzliche Tags
[multiform „your-name“] – Der multiform Formular-tag kann benutzt werden um ein Formularfeld von vorhergehenden Schritt anzuzeigen. Ersetze your-name mit dem Namen deines Feldes.

[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.

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 currently does not support „pipes“ in the select field. See for more on what „pipes“ is on the Contact Form 7 site.

  • 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.


Der „Weiter“ Button ist nicht sichtbar

Wie jedes andere Formular in Contact Form 7, musst du in dein Formular den „Senden“ Button einfügen. Nutze hierfür den normalen Submit Button mit einem eigen definierten Label: [submit "Next"].

The multistep form tag is a hidden field and tries not to add any spacing to your form. In this effort, anything directly after this tag may be hidden. To prevent this, add a carriage return after the multistep form tag, or just follow the directions and place the form tag at the end of the form.

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

If you have everything set up correctly and you get a message saying, „Please fill out the form on the previous page“ after submitting the first form, then could be one of two reasons:
1. Your Caching system is not allowing cookies to be set in a normal way. No workarounds or fixes are planned at this time. You will need to turn off caching for cookies named cf7*.
2. Your protocol or domain is not the same on all pages. Each page that holds a form needs to have the same protocol and domain. If your first page uses https like, your second page cannot be http:// or a subdomain of that.

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

If your form reloads the page after hitting the submit button, you either disabled the WordPress REST API or javascript for Contact Form 7 isn’t working correctly. Please see the Contact Form 7’s troubleshooting page for more information:

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

[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.

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

The multiform form-tag should only be used on the Form tab. On the Mail tab follow the instructions from the Contact Fom 7 documentation. So if you wanted to show the your-name field, type [your-name].

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

Yes, you can, but it requires you to add code to your theme’s functions.php file. See this forum post for more details:

Meine Formulare funktionieren nicht wie erwartet. Was ist falsch?
  • Bitte prüfe, ob du in jedem Formular den Tag multi-step entsprechend eingebaut hast.

  • Es ist sehr häufig, dass andere Plugins Javascript-Fehler haben, die verhindern können, dass dieses Plugin ordnungsgemäß läuft. Deaktiviere alle anderen Plugins und versuche es erneut.

Previous button leads to ‚undefined‘

Das liegt daran, dass du falsche Angaben im Code hast. Zum Beispiel: Dein Formular hat in Schritt 2 von 3 den Code [multistep "1-3-"], doch richtig wäre gewesen: [multistep "2-3-"].

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

The multistep form tag is a hidden field and tries not to add any spacing to your form. In this effort, anything directly after this tag may be hidden. To prevent this, add a carriage return after the multistep form tag, or just follow the directions and place the form tag at the end of the form.

How do I get Flamingo to not save every form?

* Replace 1, 2, 3 with the ids of the forms you don’t want to save.
function my_prevent_saving($form, $results) {
$no_save_form_ids = array( 1, 2, 3 );
if ( in_array( $results[‚contact_form_id‘], $no_save_form_ids ) ) {
remove_action( ‚wpcf7_submit‘, ‚wpcf7_flamingo_submit‘, 10, 2 );
add_action( ‚wpcf7_submit‘, ‚my_prevent_saving‘, 9, 2 );


13. September 2019
I have raised an issue with this plugin and an other one: PHP warning every single time the cron runs. As a web PHP developer myself for more than 25 years I've spent time trying to narrow down the problem and bring them some intels. The only answer from the support was basically: "that's not our plugin". I'm not the one who use to complain, specially when you're given a tool for free like this plugin. But I would expect the support to address the issue and spend at least as much time as myself looking into it. Removing this plugin. Thank you for nothing.
3. Juli 2018
Unfortunately, this plugin is more trouble than it's worth. It's constantly breaking (literally every single time there's an update) which means I'm losing a lot of business. Every few days I have a potential client email me telling me that they can't proceed past page 2 of the form. And now with the latest update it completely breaks my website to the point that I can't even login to wp-admin anymore and visitors to my page are greeted with an Error 500 message.
4. Juli 2017
When it doesn't work the error message is a little obtuse, but when it does, it works great! Thanks a lot for making this!
Lies alle 26 Rezensionen

Mitwirkende & Entwickler

„Contact Form 7 Multi-Step Forms“ ist Open-Source-Software. Folgende Menschen haben an diesem Plugin mitgewirkt:




added ability to skip over steps if it was previously submitted.


updated freemius.


fixed issue where CF7 MSM files still loaded even when WPCF7_LOAD_JS is set to false.
fixed success message not showing for forms with a wrapping inner element.
fixed multi-select population.
updated how select is set so it can trigger javascript changes.


fixed issue where WPCF7_LOAD_JS is set to false and resulted in 302 error. thanks to @zetoun17.
security fix


added missing freemius files


updated freemius


PRO: fixed „Cannot use a scalar value as an array“ warning when CF7 Conditional Fields plugin is active.


PRO: fixed compatibility with Contact Form 7 Conditional Fields plugin to only show group that is supposed to show.


deprecated wpcf7_form_field_value filters.
added cf7msm_form_field_value filters.


PRO: fixed conditional fields (from the Conditional Fields for Contact Form 7 plugin) not showing in email.


fixed quotes in values causing errors.
added plugin action links.


fixed session storage not clearing after final step was submitted.
fixed form not hiding after final step was submitted. Thanks to @tschodde.


changed internal field names to be prefixed with cf7msm.
added PRO version to handle long forms.
fixed minor issues.


updated i18n code.


Contact From 7 version 4.8 or above is required for this version.
fixed incompatible JSON_UNESCAPED_UNICODE for PHP versions < 5.4.


Contact From 7 version 4.8 or above is required for this version.
fixed not redirecting to next step on older iPad browsers.
fixed illegal offset exception warning.
added JSON_UNESCAPED_UNICODE for czech language.


Contact Form 7 Version 4.8 oder neuer ist erforderlich für diese Version.
REPARIERT: Zurück Button in Firefox.
REPARIERT: URL wird nicht richtig dargestellt wenn es das & Symbol enthält.


Contact From 7 Version 4.8 oder höher ist erforderlich für diese Version.
REPARIERT: Zurück Button springt mehr als nur einen Schritt zurück.


Contact From 7 Version 4.8 oder neuer ist erforderlich für diese Version.
REPARIERT: Einen Fehler, welcher bei Benutzung von scan_form_tags eine Warnung anzeigt, wenn am Server das anzeigen von PHP Warnungen aktiviert ist.


Contact From 7 Version 4.8 oder neuer ist erforderlich für diese Version.
REPARIERT: Zurück Button funktioniert nicht in Verbindung mit Contact Form 7 Version 4.8.
REPARIERT: Formularfelder von vorhergehenden Schritte werden nicht angezeigt, wenn Contact Form 7 Version 4.8 verwendet wird.
Danke an @eddraw, Veraltete Funktionen aktualisiert.


Use Contact Form 7’s built-in hidden form tag if version 4.6 or above is present.


fixed issue where using the [multiform] tag causes the field to blank out and not show in emails on certain servers.


added field_name and value to wpcf7_form_field_value filter.


fixed calls to deprecated CF7 functions.
Increased minimum WP version to match CF7’s specs.


Thanks to @eddraw for the updates!
added translation: add pot file.
fixed translation: use the name of the plugin as textdomain and load it.


added form id to wh_hide_cf7_step_message filter.


fixed plugin conflict.


fixed issue where server variables may not be defined. added some support for strings to be translatable.


Fix previous button not showing class attribute.


Minor fix to detecting if previous form was filled.


Added Form Tags to Form Tag Generator. No more needing to update the Additional Settings tab.
Added error alert when form is too large.
Fixed Deprecated: preg_replace() error message.
Fixed certain instances where the „Please fill out the form on the previous page“ messages displayed unexpectedly.
Fixed issue where it was possible to type in the url of the next step after receiving validation errors on the current step.


Added support for when contact form 7 ajax is disabled.


Added support for free_text in checkboxes and radio buttons.


fix empty checkboxes causing javascript error when going back.


fix exclusive checkboxes not saving on back. added version to javascript.


fix radio button not saving on back. make sure its the last step before clearing cookies.


Fixed bug where tapping the Submit button on the final step submits form even with validation errors.


Updated to be compatible with Contact Form 7 version 3.9.


Updated readme to be more readable.
Fixed issue for servers with magic quotes turned off. Fixes „Please fill out the form on the previous page“ error.


Fix: Also detect contact-form-7-3rd-party-integration/hidden.php so no conflicts arise if both are activated.


Fix: Better detection of contact-form-7-modules plugin so no conflicts arise if both are activated.


Fixed back button functionality.


Some people are having trouble with cookies. added ‚cf7msm_force_session‘ filter to force to use session.


Added checks to prevent errors when contact form 7 is not installed.


Confused with the version numbers. apparently 1.02 is greater than 1.1?


renamed all function names to be more consistent.
use cookies before falling back to session.
added back shortcode so users can go back to previous step.


Versionsnummern aktualisiert


Readme aktualisiert