Docs

Plugear Review Step for Contact Form 7 Free edition

A free plugin that adds a confirmation step — enter, review, send — to your Contact Form 7 forms. One form, one shortcode: you turn it on with a single checkbox in a Confirm Screen tab on the form you already have.

This is the documentation for a free plugin distributed on WordPress.org. The rest of this site is a Japanese WordPress plugin store — for questions about this plugin, please use the WordPress.org support forum.

Plugear Review Step for Contact Form 7 adds a confirmation step — enter, review, send — to your Contact Form 7 forms. There is no second form to keep in sync and no confirmation page to create. It is distributed free on WordPress.org, with no purchase and no license key.

This page describes version 1.0.0.

Overview

Contact Form 7 sends a message the moment the visitor presses submit. There is no chance to look at what was typed, so typos go out as they are and the same message is sometimes sent twice. This plugin puts a confirmation step in between: the visitor presses the button, sees the values they entered, and only then sends.

The confirmation is not a separate panel. Each input is replaced in place by the value that was typed, so labels, table rows, fieldsets and every bit of markup you wrote stay exactly where they were. A form laid out in a table stays a table. A two-column layout stays two columns.

What it does

  • Turns the confirmation step on or off per form — one form, one shortcode, nothing to add to the form template
  • Lets you set the wording of the Confirm, Edit and Send buttons per form
  • Optionally shows a placeholder for fields the visitor left empty
  • Optionally scrolls to the top of the form when entering and when leaving the confirmation
  • Converts full-width letters, digits and spaces to half-width when the confirm button is pressed
  • Shows validation errors with Contact Form 7's own markup and accessibility wiring

The confirmation step never sends mail and never runs a spam check. It runs Contact Form 7's own validation rules on the server and returns the result — nothing else. When the visitor presses Send, Contact Form 7's normal submission runs exactly once.

Requirements

ItemRequirement
WordPress6.0 or later
PHP7.4 or later
Contact Form 75.7 or later (required)
Tested up toWordPress 7.0
LicenseGPLv2 or later

When Contact Form 7 is missing, inactive, or older than 5.7, this plugin registers nothing at all and only shows a notice in wp-admin. Your forms keep working as plain Contact Form 7.

Multisite is outside what this plugin is verified against. Activation is not blocked, but the behaviour there has not been tested.

Interface language

This plugin ships no translation files. Translations for WordPress.org plugins are delivered by translate.wordpress.org, so the plugin's own strings appear in English until a translation for your locale has been contributed and approved there.

The wording your visitors see — the Confirm, Edit and Send buttons and the placeholder for empty fields — is not affected by that. Those are per-form settings you type in yourself, in any language, from the first day.

Installing the plugin

  1. Install and activate Contact Form 7 (5.7 or later) first.
  2. In wp-admin, go to Plugins → Add New and search for “Plugear Review Step for Contact Form 7”, then install it.
  3. Activate it on the Plugins screen.

On WordPress 6.5 and later this plugin declares Contact Form 7 as a dependency, so WordPress blocks activation until Contact Form 7 is active, and it will not let you deactivate or delete Contact Form 7 while this plugin is active.

WordPress 6.0 to 6.4 ignore that header, so on those versions the only sign is this plugin's own admin notice.

A version header cannot express a minimum version, so Contact Form 7 5.6 still passes WordPress's dependency check. In that case this plugin detects it, stops loading its features, and the notice tells you both the version required and the version you have.

Quick start

  1. Open Contact → Contact Forms and edit the form you want a confirmation step on.
  2. Open the Confirm Screen tab and tick Show a confirmation step before sending.
  3. Set the button wording if you want to, and Save.

That is all. Nothing in the form template has to change. The form on your site now shows a confirmation step.

The Confirm Screen tab added to the form editor
The Confirm Screen tab added to the form editor

The Confirm Screen tab

Every setting is per form, and it travels with the form when you duplicate it. The plugin adds no admin menu of its own — there is no site-wide settings screen.

SettingWhat it doesDefault
Confirm screen
Show a confirmation step before sending
Use the confirmation step on this form Off
Confirm button Wording of the submit button on the input screen (the button that goes to the confirmation) Empty (Confirm)
Edit button Wording of the button that returns to the input screen Empty (Edit)
Send button Wording of the button that sends from the confirmation Empty (Send)
Empty fields
Show a placeholder for fields left empty
Show something in fields the visitor left empty Off
Empty field text The text shown for an empty field Empty (Not entered)
Scrolling
Scroll to the top of the form when the confirmation appears
Scroll to the top of the form when entering the confirmation On
Scrolling
Scroll to the top of the form when returning to the input screen
Scroll to the top of the form when going back to the input screen On

Leave a button field empty and the translated default is used at display time (Confirm / Edit / Send / Not entered), so the wording follows the language instead of being frozen at the moment you saved. Labels are limited to 100 characters.

Because inputs are replaced in place, a row for an empty field cannot be removed — its label lives in your own markup, not in anything this plugin renders. Empty fields is therefore a choice between showing a recognisable placeholder and showing nothing at all.

What the visitor sees

On a form with the confirmation step turned on, the submit button carries the wording from Confirm button (Confirm by default). When the visitor presses it, the values are validated on the server and, if everything is in order, the form switches to the confirmation.

The form as the visitor fills it in — the plugin does not change your markup
The form as the visitor fills it in — the plugin does not change your markup
The confirmation: every input is replaced in place by the value that was typed
The confirmation: every input is replaced in place by the value that was typed

How the confirmation is built

  • Only the input controls themselves are replaced. Labels, table rows, fieldsets and any nesting your theme adds are left untouched
  • Inputs are hidden, not removed, so no value is lost from the final submission
  • The Edit and Send buttons are cloned from your existing submit button, so they inherit whatever your theme gives it
  • The original submit button is hidden rather than removed, so your theme's markup stays intact
  • Pressing Edit undoes every change made for the confirmation, including any error display

How each field type appears

FieldOn the confirmation
Text, email, tel, URL, textarea and similarThe value that was typed. Line breaks are preserved
Checkboxes and radio buttonsThe label text of the chosen options; unchosen options are hidden row and all
Acceptance ([acceptance])If it is ticked, the consent wording stays visible as it is
Drop-down ([select])The visible text of the selected options; options with an empty value are ignored
File ([file])The file name that was chosen. The file itself is uploaded with the final submission as usual
PasswordOne per character; the value is not shown
Hidden fields and submit buttonsNot shown on the confirmation

Fields left empty

With Empty fields off, an empty field shows nothing — only its label remains. With it on, the wording from Empty field text (Not entered by default) is shown instead.

When something is invalid

Validation happens on the server when the confirm button is pressed. If something is invalid the form does not move on; the errors appear where they are.

  • Messages appear in the same place, with the same markup and the same attributes Contact Form 7 uses itself, so your theme's styling for form errors keeps working
  • The summary message is the one configured on the form in Contact Form 7 (its validation error message)
  • Focus and scrolling move to the first field with an error
A validation error raised at the confirmation step
A validation error raised at the confirmation step

If the request fails, or the confirmation cannot be produced for some other reason, no wording from the sending context is shown — nothing has been sent yet. A dedicated message is used instead: “The confirmation screen could not be displayed. Please try again in a moment.”

Acceptance ([acceptance]) and Really Simple CAPTCHA ([captchar]) are not validated at the confirmation step. Consent is the act of sending, so it is not judged before the visitor has decided; and validating the CAPTCHA here would consume it and make the real submission fail. Both are validated as usual when the message is sent.

Converting full-width characters

On a Japanese phone keyboard, typing a number produces full-width digits (090…). A phone number entered that way is rejected by Contact Form 7's own validation, and the visitor is sent back to retype it without being told why.

This plugin converts full-width letters, digits, punctuation and spaces to half-width at the moment the confirm button is pressed — never while the visitor is typing, which would break Japanese input mid-conversion. Kana and kanji are left alone.

The input itself is rewritten, so the confirmation, the submitted value and the mail you receive all carry the same value.

Which fields are converted

By default, form tags whose type is tel, number, email or url. Any other field can opt in — and any default one can opt out — with an option on the form tag.

[text* your-zip hankaku]      … opt in
[tel your-tel hankaku:off]    … opt out

[number] is the one exception. The browser itself discards full-width digits from an input[type=number] before any script can see them, so there is nothing left to convert. For numeric values that may be typed full-width, use [text] with the hankaku option.

The mail and other plugins

The confirmation step never enters Contact Form 7's submission flow. At that stage no mail is sent, no spam check is charged, and none of the wpcf7_* submission hooks fire. Other plugins that act on a submission cannot be triggered twice.

When the visitor presses Send, Contact Form 7 runs its normal submission exactly once. The mail you receive is the same mail you would have received without this plugin.

QuestionAnswer
reCAPTCHA, Turnstile, Akismet They run at the spam-check stage, which the confirmation step does not enter at all. They do their usual work when the message is actually sent
File uploads The confirmation shows the file name; the file is uploaded with the final submission as usual
Duplicating a form The confirmation settings are duplicated along with the form
JavaScript unavailable The confirmation step is skipped and the form behaves like plain Contact Form 7 — the message is still delivered
Page caching If Contact Form 7 re-initialises the forms when a cached page loads, the confirmation returns to the input screen

Styling the confirmation

Most of the confirmation is your own markup, already styled by your theme. For the parts this plugin adds, style these classes.

ClassWhere it lands
plg_prscf7_confirmingThe .wpcf7 wrapper while the confirmation is shown
plg_prscf7_valueThe element holding a displayed value
plg_prscf7_actionsThe container around the Edit and Send buttons
plg_prscf7_backThe Edit button
plg_prscf7_sendThe Send button

Only three rules ship as CSS. Colour, fonts and spacing are left to your theme.

  • The gap between the Edit and Send buttons
  • A secondary look for the Edit button — background removed, a border drawn in the current text colour, so no palette is imposed on your theme
  • Hiding Contact Form 7's spinner while the confirmation is shown

To override the Edit button's look, write a selector at least as specific as .wpcf7 .plg_prscf7_actions .plg_prscf7_back, or use !important. You can also drop the bundled stylesheet entirely with the plg_prscf7_load_css filter below.

Accessibility

  • Entering and leaving the confirmation is announced through Contact Form 7's own role="status" region. It is not shown visually — for sighted visitors the change of display is the signal
  • Focus moves to the top of the form at the same time, so it does not fall to the document when the pressed button is hidden. It does not join the Tab order
  • Errors use the same two-part wiring as Contact Form 7: a visible tip plus a screen-reader list item referenced from the input with aria-describedby
  • When prefers-reduced-motion is set, scrolling jumps instead of animating

For developers

Filters

HookDefaultPurpose
plg_prscf7_scroll_offset 10vh The gap kept above the form when scrolling to the confirmation
plg_prscf7_load_css true Return false to drop the bundled stylesheet
plg_prscf7_normalize_fields The names derived from types and form-tag options Which fields are converted to half-width
plg_prscf7_safe_validation false Return true to skip third-party wpcf7_validate_* callbacks during the confirmation step and run Contact Form 7's own validation only
// A theme with an 80px sticky header
add_filter( 'plg_prscf7_scroll_offset', function () {
	return '80px';
} );

// Do not load the bundled stylesheet
add_filter( 'plg_prscf7_load_css', '__return_false' );

plg_prscf7_scroll_offset accepts a number followed by px, %, rem, em, vh or vw, or an empty string / 0 for no gap. Anything else — a calc() expression, say — is not an error; the default 10vh is used instead.

JavaScript

Forms inserted after page load are initialised explicitly, the same contract Contact Form 7 uses with wpcf7.init().

plgPrscf7.init( document.querySelector( '#my-container' ) );

These events are dispatched on the form element, and they bubble.

EventWhen
plg_prscf7_confirmJust after switching to the confirmation
plg_prscf7_backJust after returning to the input screen
plg_prscf7_invalidField errors stopped the confirmation (detail carries the response)
plg_prscf7_errorA network failure or a 4xx / 5xx response (detail carries the result)

REST endpoint

POST /wp-json/plugear-review-step-for-contact-form-7/v1/contact-forms/<id>/confirm

This is what the front end calls when the confirm button is pressed. It has no side effects at all: it writes nothing to the database, sends no mail, makes no outbound request and moves no uploaded file. Visitors are not logged in, so — like Contact Form 7's own feedback endpoint — it is public.

  • The request must be multipart/form-data; anything else is a 415
  • A form that does not exist, and a form with the confirmation turned off, both return 404
  • The response carries only valid and the per-field invalid_fields — never a message meant for the visitor

Data and uninstalling

Nothing is deleted by default when you delete the plugin. Your forms and their confirmation settings are left alone, so reinstalling picks up where you left off.

Deactivating changes nothing either.

An opt-in option for deleting the plugin's data exists internally, but version 1.0.0 has no settings screen to switch it on. In this version the only behaviour you can reach is “delete nothing”.

Troubleshooting

The form submits without showing a confirmation

Check that Show a confirmation step before sending is ticked — and saved — on that particular form, in its Confirm Screen tab; the setting is per form. Note also that where JavaScript is unavailable the confirmation step is skipped and the form behaves like plain Contact Form 7.

wp-admin says the plugin “is inactive”

Contact Form 7 is either inactive or older than 5.7. The notice names both the version required and the version installed. Activate or update Contact Form 7.

I cannot find the settings screen

There isn't one. This plugin adds no admin menu of its own — everything lives in the Confirm Screen tab of each form under Contact → Contact Forms.

The settings are in English on my localized site

The plugin ships no translations; they are delivered by translate.wordpress.org once contributed and approved for your locale. The wording your visitors see is unaffected — type it into Confirm button, Edit button and Send button in any language you like.

The Edit button does not fit my theme

Both buttons are clones of your submit button, so without help they would look like two identical primary buttons. The bundled CSS drops the background of the Edit button and draws a border instead, which does not suit every theme. Override it with a selector at least as specific as .wpcf7 .plg_prscf7_actions .plg_prscf7_back, or turn the stylesheet off with the plg_prscf7_load_css filter.

Full-width digits are not being converted

By default only tel, number, email and url fields are converted; add hankaku to the form tag for anything else. [number] cannot be converted, because the browser discards full-width digits before the script runs.

Still stuck

Please use the WordPress.org support forum for questions and bug reports. There is a link at the top of this page.