How do I create a contact form on my WordPress site?

Install a contact form plugin, build a form in its interface, and place the plugin’s block (or its shortcode) on the page where the form should appear. WordPress core does not include a contact form; a plugin is how every WordPress site puts one in front of visitors. The shape of the process is the same across every mainstream form plugin: install, configure fields, embed on a page.

The mail side of the form is a separate concern from the form itself. Every form plugin sends its submission notifications through WordPress’s wp_mail() function, which means a form plugin without a properly configured mailer will silently drop notification emails or land them in spam. See Why are my WordPress emails not being delivered? for the sending side of the equation.

The step-by-step

  1. Install a contact form plugin. Contact Form 7 is the most-installed free option and has been the default for years. WPForms Lite is the most popular commercial option with a free tier. Fluent Forms, Ninja Forms, Gravity Forms, and Formidable Forms all cover the same ground with slightly different UX and pricing.
  2. Create the form in the plugin’s admin interface. Add the fields you want (name, email, subject, message, plus any custom fields). The plugin generates a shortcode or block for the finished form.
  3. Create or edit a page for the form. A “Contact” page is the usual choice.
  4. Embed the form. In the block editor, add the plugin’s block (each major plugin ships its own) and select the form. In the classic editor or as a fallback, paste the plugin’s shortcode.
  5. Set the notification recipient. Every form plugin has a settings screen for where submission notifications get sent. This defaults to the site’s admin email; change it to whichever address should receive submissions.
  6. Publish the page and test by submitting the form.

Which form plugin to pick

The plugins differ less than their marketing pages suggest. Broad shape:

  • Contact Form 7 is free, has no upsell UI, and has been maintained continuously since 2007. The editing UI is a plain textarea with the plugin’s shortcode-style markup, which people either love or find archaic. Fine default for sites that want a form and nothing else.
  • WPForms Lite is the polished commercial option: drag-and-drop builder, block editor integration, aggressive upsell to WPForms Pro. Free tier is workable; the Pro tier ($49.50 first year at time of writing) unlocks the payment gateways, conditional logic, and the marketing-integration features.
  • Fluent Forms is the closest challenger to WPForms on features per dollar. Its free tier is more generous than WPForms Lite.
  • Gravity Forms ($59 first year, no free version) is what agencies default to. Larger feature set, more third-party integrations, no upsell interruptions.

For a plain contact form with a message field and an email notification, Contact Form 7 is the shortest path. For a form with conditional logic, file uploads, or a payment gateway, one of the commercial plugins is easier.

Configuring the notification email properly

Every form plugin exposes at least four fields in its notification settings: To, From, Reply-To, and Subject. The most common misconfiguration is putting the submitter’s email address in the From field. That causes DKIM misalignment: the mail is signed by your domain but claims to be from a @gmail.com (or wherever) address, and mailbox providers reject or spam-folder it.

The correct pattern:

  • From: a fixed address on your own domain ([email protected] or similar).
  • Reply-To: the submitter’s email address (using the plugin’s tag for the email field, typically [your-email] in CF7 or {field_id="1"} in WPForms).

This way the mail authenticates correctly, and clicking Reply on the notification still sends the response to the person who submitted the form. See Set contact form sender email as reply-to address for the exact tag syntax across plugins.

After the form is live

Two things are worth setting up right away:

  1. Spam protection. An unprotected form starts receiving spam within days of going live. See How do I protect my WordPress contact form from spam? for the standard stack.
  2. Submission storage. Form plugins send notifications by default but do not always save submissions to the database. If you need a record of who submitted what, install Flamingo alongside Contact Form 7, or use the built-in Entries feature in WPForms Pro, Fluent Forms, Gravity Forms, or Formidable.

A no-plugin contact form is possible for the technically curious: see Create a WordPress contact form without plugins. It is more work than installing Contact Form 7 and has no meaningful advantage for most sites.