Title: Custom Contact Forms
Author: outlawgt
Published: <strong>Jiyè 22, 2010</strong>
Last modified: Oktòb 26, 2026

---

Search plugins

![](https://ps.w.org/custom-contact-forms/assets/banner-772x250.png?rev=1068285)

![](https://ps.w.org/custom-contact-forms/assets/icon-256x256.gif?rev=3650422)

# Custom Contact Forms

 By [outlawgt](https://profiles.wordpress.org/outlawgt/)

[Download](https://downloads.wordpress.org/plugin/custom-contact-forms.7.19.1.zip)

[Live Preview](https://hat.wordpress.org/plugins/custom-contact-forms/?preview=1)

 * [Details](https://hat.wordpress.org/plugins/custom-contact-forms/#description)
 * [Reviews](https://hat.wordpress.org/plugins/custom-contact-forms/#reviews)
 *  [Installation](https://hat.wordpress.org/plugins/custom-contact-forms/#installation)
 * [Development](https://hat.wordpress.org/plugins/custom-contact-forms/#developers)

 [Support](https://wordpress.org/support/plugin/custom-contact-forms/)

## Description

**Build powerful custom forms with an intuitive drag-and-drop builder.** Create 
everything from simple contact forms to advanced forms with templates, Gutenberg,
modern spam protection, and more.

Custom Contact Forms gives you features many form plugins keep for their paid versions:
every entry saved to your database, conditional logic, file uploads, a signature
field, Mailchimp signup forms, webhooks to Zapier, Make and n8n, and a dashboard
that shows how each form performs. Build with drag and drop, start from a template,
or describe the form you need.

**Try it before you install:** click Preview above to open a demo site with sample
forms and a month of entries.

#### Every Entry, Saved and Measured

Each submission is stored in your WordPress database, so nothing is lost if a notification
email goes astray. The Forms dashboard shows entries, form views, conversion rate
and blocked spam for any date range, with a chart and a per-form breakdown. A weekly
summary email brings the same numbers to your inbox every Monday. Export entries
to CSV at any time.

#### Mailchimp, Webhooks and More, on One Page

Add people who fill in a form to a Mailchimp audience, with double opt-in and an
optional consent checkbox. Each form chooses its own audience. Webhooks send every
new entry to Zapier, Make, n8n or any other service that accepts them, so your forms
can reach the apps you already use.

Everything connects from one Integrations page: Mailchimp, webhooks, Akismet, hCaptcha,
Cloudflare Turnstile and reCAPTCHA, each on its own card that shows whether it is
connected. If a subscriber or webhook does not go through, the reason is listed 
under Recent problems, so you are not left guessing.

#### Signatures, Free

Add a signature field to any form. Visitors sign with a mouse, finger or stylus,
and the signature is saved with the entry and included in the notification email.

#### Smart Forms Without Code

Conditional logic is included free: show or hide fields and sections based on answers.
Accept file uploads, lay fields out in columns, send multiple email notifications
per form, and create a WordPress post from a submission.

#### Switch From Contact Form 7 in One Step

Contact Form 7 does not save submissions. Import your Contact Form 7 and WPForms
forms with their labels, fields and notification email under Forms  Import. Your
original forms are only read, never changed.

#### AI That Stays On Your Site

Describe the form you need, such as “a booking form for a dog grooming appointment
with the owner’s details and their preferred date”, and it is built for you, ready
to edit. It uses the AI provider already connected to your site under Settings >
Connectors, so there is no API key to enter and nothing is sent to us. Requires 
WordPress 7.0 or later; the option stays hidden otherwise.

#### Spam Protection Built In

Cloudflare Turnstile, hCaptcha, reCAPTCHA, honeypot, time trap, rate limiting, disposable
email blocking and a keyword blacklist, with every blocked attempt counted on the
dashboard. If you use Akismet, entries it flags go to a spam folder instead of being
thrown away, so a real message caught by mistake is never lost.

#### Build Your Way

The drag-and-drop builder lives inside the media manager, so there are no separate
admin pages and no new interface to learn. Live previews update as you build. Start
from a prebuilt template (contact, quote request, newsletter, event registration,
or feedback), style forms with included themes, per-field widths or your own CSS,
and insert them with the Gutenberg block, shortcode, widget, or PHP function.

**Powering thousands of active websites, with over 1.3 million all-time downloads.**
Originally created by Taylor Lovett, Custom Contact Forms is now actively maintained
by [Dmitry Alexander](https://oiopublisher.com/), rebuilt for modern WordPress with
a hardened, PHP 8+ codebase, a refreshed builder, and new features added regularly.

#### What You Can Build

 * Contact forms, quote requests, support forms, event registrations, newsletter
   signups, service agreements
 * Mailchimp newsletter signup forms with double opt-in and a consent checkbox
 * Signed agreements, release forms and waivers with a signature field
 * Forms that send every entry to Zapier, Make, n8n or your own app with webhooks
 * Text, paragraph, email (with optional confirmation), name, phone, website, address(
   US + international), date/time, dropdowns, checkboxes, radio buttons, file uploads,
   signatures, hidden fields, and HTML blocks
 * Conditional fields and sections: show/hide fields based on other field values
 * Multiple email notifications per form: customize recipients, subject, from name,
   reply-to, and body with field mapping
 * Post creation on submission: map form fields to post fields, meta, and taxonomies

#### Powerful Features, Included Free

 * Forms dashboard with entries, views, conversion rate and blocked spam for any
   date range
 * Weekly summary email with entries and views per form (easy to turn off)
 * Mailchimp: add subscribers to a different audience per form, with double opt-
   in
 * Webhooks: send each new entry as JSON to Zapier, Make, n8n or any URL
 * Signature field that works on phones, tablets and desktops
 * Drag-and-drop form builder with live preview in the media manager
 * Prebuilt form templates for the most common form types
 * Build a form by describing it, using your site’s own AI connection
 * Gutenberg block, shortcode, widget, and PHP template support
 * Multiple form themes plus per-field width controls and custom CSS
 * AJAX form submission: no page reloads
 * Import your forms from Contact Form 7 and WPForms: fields, labels, required flags,
   placeholders, and choices, with a report of anything that needs your attention
 * Export submissions to CSV, and import submissions from CSV with automatic column
   mapping
 * Import and export forms via WordPress XML
 * Cloudflare Turnstile, hCaptcha, reCAPTCHA, and simple captcha options
 * Akismet checks with a spam folder: move a flagged entry back with one click
 * Integrations page: every integration on one screen, with what is free, what needs
   Pro, and what is connected
 * Built-in spam protection: honeypot, time-based trap, IP rate limiting, disposable
   email blocking, keyword blacklist
 * Email diagnostics: send test emails and view delivery failure logs
 * Submissions widget on your WordPress dashboard
 * Restrict forms to logged-in users, or pause forms with a custom message
 * Customizable completion text or redirect URL
 * Conditional asset loading: only load scripts where forms appear
 * Extensible with hooks, filters, and custom field types

#### Quick Start

 1. Go to Forms  Templates and pick a starting template, or go to Forms  Forms and 
    Submissions to start from scratch
 2. Drag fields from the sidebar into the form area, and click a field to edit its 
    label, width, and options
 3. Save the form
 4. Insert it with the Gutenberg block (search “CCF” in the block inserter) or the `[
    ccf_form id="X"]` shortcode
 5. Click Forms in the admin menu to see entries, views and conversion rates on the
    Forms dashboard

#### Customize More with Pro

Custom Contact Forms Pro turns the builder you already know into forms that sell,
book, and sign, with no e-commerce stack required: Stripe and PayPal payment forms,
donation forms, deposit and booking forms, and waivers with signed PDF records.

 * **Stripe payments on the form**: cards, Apple Pay, Google Pay, and Link, with
   a live “Pay $25.00” button and server-verified totals
 * **PayPal payments**: pay in place without leaving your form, with the same server-
   verified totals
 * **Product & pricing fields**: fixed price, multiple options, or customer-chooses-
   amount, with quantities, images, and enforced minimums
 * **Coupons & live totals**: percentage or fixed discounts, order total updates
   as visitors choose
 * **Signatures in PDF receipts**: the signature appears in the PDF receipt, alongside
   consent records and waiver and agreement templates
 * **Consent / terms field**: scrollable terms with versioned agreement records,
   snapshotted permanently
 * **PDF receipts**: attached to notification emails for paid orders, plus one-click
   PDF download of any submission
 * **Multi-step forms**: page breaks, progress bar, per-step validation
 * **Conditional pricing**: show or hide products and priced fields based on answers
 * **More email marketing**: MailerLite, Brevo, Kit, ActiveCampaign and MailPoet,
   alongside the free Mailchimp connection
 * **Survey & star rating fields**: Likert grids and quick ratings
 * **Address autocomplete**: visitors pick their address as they type and the street,
   city, state and ZIP fill themselves in (uses your own Google API key)
 * **SMS confirmations**: text customers the moment they book or pay, through your
   own Twilio account
 * **13 ready-made templates**: donations, orders, registrations, waivers, agreements,
   and more
 * **No added transaction fees**: you pay only Stripe’s or PayPal’s standard processing
   fees

[Learn more about Custom Contact Forms Pro](https://customformspro.com/)

### External Services

This plugin optionally connects to the following third-party services for spam protection,
email marketing and webhooks. These services are only used when the site administrator
explicitly enables and configures them.

#### Google reCAPTCHA

When enabled in the form builder, this plugin loads the Google reCAPTCHA widget 
on form pages and sends form submission verification requests to Google’s servers.
The user’s reCAPTCHA response token is sent to Google for validation. No personal
data is sent by the plugin itself, though Google may collect usage data through 
their widget script.

 * Service provider: Google LLC
 * [Terms of Service](https://policies.google.com/terms)
 * [Privacy Policy](https://policies.google.com/privacy)

#### Cloudflare Turnstile

When enabled on the Cloudflare Turnstile card in Forms  Integrations, this plugin
loads the Cloudflare Turnstile widget script on form pages and sends form submission
verification requests to Cloudflare’s servers. The user’s Turnstile response token
and the visitor’s IP address are sent to Cloudflare for validation.

 * Service provider: Cloudflare, Inc.
 * [Terms of Service](https://www.cloudflare.com/terms/)
 * [Privacy Policy](https://www.cloudflare.com/privacypolicy/)

#### hCaptcha

When enabled on the hCaptcha card in Forms  Integrations, this plugin loads the 
hCaptcha widget script on form pages and sends form submission verification requests
to hCaptcha’s servers. The visitor’s hCaptcha response token, the site key and the
visitor’s IP address are sent to hCaptcha for validation.

 * Service provider: Intuition Machines, Inc.
 * [Terms of Service](https://www.hcaptcha.com/terms)
 * [Privacy Policy](https://www.hcaptcha.com/privacy)

#### Akismet

When the Akismet plugin is installed and set up, and Akismet checks are turned on
in its card on Forms  Integrations, the name, email, website and text fields of 
each entry, the visitor’s IP address, browser user agent and referring page are 
sent to Akismet to check for spam. When you choose “Not spam”, the entry is sent
to Akismet again so it can learn from the correction.

 * Service provider: Automattic, Inc.
 * [Terms of Service](https://akismet.com/tos/)
 * [Privacy Policy](https://automattic.com/privacy/)

#### Mailchimp

When you add a Mailchimp API key in Forms  Integrations and choose an audience for
a form, this plugin connects to the Mailchimp Marketing API to list your audiences,
and sends the email address and name from each entry of that form to the chosen 
audience. If you choose a consent checkbox, only entries where it is ticked are 
sent.

 * Service provider: The Rocket Science Group LLC (Intuit Mailchimp)
 * [Terms of Use](https://mailchimp.com/legal/terms/)
 * [Privacy Statement](https://mailchimp.com/legal/privacy/)

#### Webhooks

When you add webhook URLs to a form, each new entry of that form (the form name,
entry date, page address and every field’s label and value) is sent to those URLs.
Only the URLs you enter are contacted. The terms and privacy policy of the service
you choose apply to the data it receives.

#### Custom Contact Forms tips and news (oiopublisher.com)

The plugin offers an optional signup for tips and release news, once on the Forms
dashboard and once in the form builder, and on Forms > Settings. Only if you click
Subscribe, the plugin sends the email address and first name you entered, your site
address, your Custom Contact Forms and WordPress versions, where you signed up, 
and the consent wording shown to you, to our server at api.oiopublisher.com. Choosing“
No thanks” or closing the box sends nothing. Every email we send has an unsubscribe
link, and you can ask us to remove your details at any time.

 * Service provider: OIO Publisher (the publisher of Custom Contact Forms)
 * [Privacy Policy](https://customformspro.com/privacy-policy/)

#### Custom Contact Forms blog (customformspro.com)

The Custom Contact Forms widget on the WordPress Dashboard and the Forms Dashboard
page show the titles and dates of the three latest posts from our blog. To get them,
your site’s server reads the public feed at https://customformspro.com/feed/ at 
most once every 12 hours and keeps a copy. Like every request WordPress makes, it
carries your site’s address and WordPress version in its user agent. No form entries,
user details or visitor data are sent, and nothing is loaded from our site in your
visitors’ or users’ browsers. Hide the widget under Screen Options on the Dashboard,
or developers can turn the blog posts off in both places with `add_filter( 'ccf_dashboard_blog_feed','
__return_false' );`.

 * Service provider: OIO Publisher (the publisher of Custom Contact Forms)
 * [Privacy Policy](https://customformspro.com/privacy-policy/)

## Screenshots

[⌊Drag-and-drop form builder with live preview and field settings⌉⌊Drag-and-drop
form builder with live preview and field settings⌉[

Drag-and-drop form builder with live preview and field settings

[⌊Form submissions management with CSV export⌉⌊Form submissions management with 
CSV export⌉[

Form submissions management with CSV export

[⌊Gutenberg block with live preview and selectable form themes⌉⌊Gutenberg block 
with live preview and selectable form themes⌉[

Gutenberg block with live preview and selectable form themes

[⌊Settings page with spam protection and style options⌉⌊Settings page with spam 
protection and style options⌉[

Settings page with spam protection and style options

[⌊Prebuilt form templates to start a new form in one click⌉⌊Prebuilt form templates
to start a new form in one click⌉[

Prebuilt form templates to start a new form in one click

[⌊Forms dashboard with entries, views, conversion rate and blocked spam for any 
date range⌉⌊Forms dashboard with entries, views, conversion rate and blocked spam
for any date range⌉[

Forms dashboard with entries, views, conversion rate and blocked spam for any date
range

[⌊Signature field: visitors sign with a mouse, finger or stylus, and the signature
is saved with the entry⌉⌊Signature field: visitors sign with a mouse, finger or 
stylus, and the signature is saved with the entry⌉[

Signature field: visitors sign with a mouse, finger or stylus, and the signature
is saved with the entry

[⌊Integrations page: every integration on one screen, showing what is free, what
needs Pro, and what is connected⌉⌊Integrations page: every integration on one screen,
showing what is free, what needs Pro, and what is connected⌉[

Integrations page: every integration on one screen, showing what is free, what needs
Pro, and what is connected

## Blocks

This plugin provides 1 block.

 *   Ccf Form Block

## Installation

 1. Upload the `custom-contact-forms` folder to `/wp-content/plugins/`
 2. Activate the plugin through the Plugins menu
 3. Go to Forms  Templates to start from a prebuilt form, or Forms  Forms and Submissions
    to build your own
 4. Insert forms using the Gutenberg block or the `[ccf_form id="X"]` shortcode

#### Shortcode

    ```
    [ccf_form id="123"]
    ```

#### PHP Template Tag

    ```
    <?php if ( function_exists( 'ccf_output_form' ) ) { ccf_output_form( 123 ); } ?>
    ```

## FAQ

### How do I use a form template?

Go to Forms  Templates and choose one of the prebuilt forms (Contact, Quote Request,
Newsletter, Event Registration, or Feedback). A new form is created with the right
fields already in place, ready for you to customize and insert.

### How do I collect a signature?

Edit a form and drag the Signature field from the field list into your form. Visitors
sign in the box with a mouse, finger or stylus, and can clear it and sign again.
The signature is saved as an image with the submission, shown when you view the 
entry, and included in the notification email. Deleting the submission deletes the
signature image too.

### How do I make fields sit side by side?

Click a field in the builder, open the Advanced panel, and set its Field Width (
half, third, two-thirds, or quarter). Place two or more partial-width fields together
and they line up in columns. Widths apply on the published form, in the block editor
preview and on the front end, but not inside the builder.

### How do I add custom styling?

For per-form looks, choose a Form Theme (including the Minimal theme) on the form
or in the block settings. For site-wide custom styles, go to Forms  Settings and
add your CSS in the Custom CSS box.

### How do I add Cloudflare Turnstile or hCaptcha?

Go to Forms  Integrations and click Set up on the Cloudflare Turnstile or hCaptcha
card. Enter your site key and secret key (free from the [Cloudflare dashboard](https://dash.cloudflare.com/?to=/:account/turnstile)
or the [hCaptcha dashboard](https://dashboard.hcaptcha.com/)), turn it on, and save.
All forms then show the check automatically. If a visitor fails it, the check resets
and asks them to try again.

### How do I insert a form?

Use the Gutenberg block (search “CCF” or “Contact Form”), the shortcode `[ccf_form
id="X"]`, the CCF widget, or the PHP template tag `ccf_output_form( X )`.

### Can I export and import form submissions?

Yes. Edit any form and click the download icon to export submissions as a CSV file.
To import, go to Forms  Import CSV, select a form, upload your CSV, and map the 
columns to form fields. The importer auto-detects matching columns by name.

### Does this plugin create custom database tables?

No. All data is stored using WordPress custom post types and post meta. Nothing 
custom is added to your database schema.

### How do I add people to my Mailchimp audience?

Go to Forms  Integrations, click Set up on the Mailchimp card, and paste a Mailchimp
API key. Then open a form, go to Form Settings, and under Email Marketing choose
Mailchimp and an audience. The form’s first Email field and Name field are used.
To ask for permission first, add a Checkboxes field such as “Send me updates” and
choose it under “Only add people who tick”. Problems, such as a deleted audience,
are listed under Recent problems at the bottom of Forms  Integrations.

### How do webhooks work?

Open a form, go to Form Settings, and paste one or more webhook URLs under Webhooks.
Each new entry is sent to those URLs as JSON, with the form, the entry date, and
every field’s label and value. Use “Send a test” to send sample data, which tools
like Zapier need before you map fields.

### Can I take payments or donations with a form?

Not with the free plugin. [Custom Contact Forms Pro](https://customformspro.com/)
adds Stripe (cards, Apple Pay, Google Pay and Link) and PayPal payments right on
the form, with product, total and coupon fields, ready-made donation, order and 
booking deposit templates, and PDF receipts. It adds no transaction fees of its 
own.

### What happens to entries Akismet flags?

When Akismet checks are on (the Akismet card on Forms  Integrations), flagged entries
go to Forms  Spam instead of the entries list. They send no email. Choose “Not spam”
to move one to its form’s entries, which also tells Akismet it made a mistake. Spam
is deleted automatically after 30 days.

### What is the weekly summary, and how do I turn it off?

Every Monday morning your site emails the admin address the past week’s entries,
form views and blocked spam. It is sent by your own site, and weeks with no activity
are skipped. Turn it off with the link at the bottom of the email, or under Forms
Settings  Weekly Summary, where you can also change who receives it.

### What does the tips and news signup send?

Nothing unless you click Subscribe. If you do, the email address and first name 
you entered, your site address, and your plugin and WordPress versions are sent 
to us so we can email you tips and release news. “No thanks” is remembered on your
site only and contacts no one. Every email has an unsubscribe link. See External
Services below for details.

### Is this plugin compatible with PHP 8?

Yes. The plugin is fully compatible with PHP 8.0, 8.1, 8.2, 8.3, and 8.4.

### What does the dashboard count, and is it private?

The dashboard counts entries from your saved submissions. It also counts form views
and blocked spam from version 7.17 onward. A view is counted once per page load 
when a visitor’s browser shows a form. Only daily totals are stored, in your own
database. Nothing about the visitor is recorded, nothing is sent to any outside 
service, and views by people who can edit forms or by obvious bots are not counted.
Developers can turn view counting off with the `ccf_count_form_views` filter.

### What does the “How are we doing?” card send?

Nothing, unless you click a button. “Post on WordPress.org” copies what you typed
to your clipboard and opens the review page, where you post it yourself. “Send feedback”
uses your site’s own email to send us your star rating, your note, your site URL,
the number of forms and entries you have, and your plugin, WordPress, and PHP versions.
No visitor data is sent, and no external tracking service is used.

### What does the deactivation survey collect?

If you deactivate the plugin, an optional survey asks why. Nothing is sent unless
you choose a reason or add a comment and click “Submit & Deactivate”. The “Skip &
Deactivate” option sends nothing. When you do submit, the plugin uses your site’s
own email to send us the reason you selected, your optional comment, your site URL,
the number of forms you have, and your plugin, WordPress, and PHP versions. No personal
data and no visitor data is collected, and no external tracking service is used.

## Reviews

![](https://secure.gravatar.com/avatar/bc28f433deaf37994fece1882986a435967403ab4b4933300540945c086a8579?
s=60&d=retro&r=g)

### 󠀁[Moved to Everest?](https://wordpress.org/support/topic/moved-to-everest/)󠁿

 [dhilly](https://profiles.wordpress.org/drewhilton/) Avril 2, 2020

Absolutely love this contact form plugin. I've used it for years on many different
websites, but because it hasn't been updated in so long, I went looking for other
options. I can't speak for the developer, but I believe the Everest Forms plugin
is the follow-on plugin – it appears to be the EXACT same thing just new & improved(
and up-to-date) – you'll recognize it immediately on the backend if you've used 
CCF for any length of time. FYI.

![](https://secure.gravatar.com/avatar/2bb5b5895fc6604c8f819dbe8ecae07b76b9bcf3dfd9690208704f73b84f36c4?
s=60&d=retro&r=g)

### 󠀁[My favorite Form Plugin](https://wordpress.org/support/topic/my-favorite-form-plugin-3/)󠁿

 [Modulino](https://profiles.wordpress.org/modulino/) Novanm 26, 2019

I tried tons of them but custom contact forms is the best.

![](https://secure.gravatar.com/avatar/54699e379e1b92a5de8bfa9bedd7288363e4a5ad40cc78e47577dadd6142b6b8?
s=60&d=retro&r=g)

### 󠀁[Has not been updated in 2 years](https://wordpress.org/support/topic/has-not-been-updated-in-2-years/)󠁿

 [scozzari](https://profiles.wordpress.org/scozzari/) Oktòb 9, 2018

Please update and test compatibility with current wordpress. I'm concerned of security
issues.

![](https://secure.gravatar.com/avatar/7589017c75192e6e569f153b059c56d854a20b2a6f1f026d34c929636376e926?
s=60&d=retro&r=g)

### 󠀁[Websites down after update of WP](https://wordpress.org/support/topic/websites-down-after-update-of-wp/)󠁿

 [SMPenev](https://profiles.wordpress.org/smpenev/) Septanm 15, 2017

3 of my websites that are hosted on different servers went down after attempting
to update WP to 4.8.1. The error is [15-Sep-2017 07:21:44 UTC] PHP Fatal error: 
Cannot redeclare create_initial_rest_routes() (previously declared in /home/XXX/
domain.com/wp-includes/rest-api.php:183) in /home/XXX/cdomain.com/wp-content/plugins/
custom-contact-forms/wp-api/plugin.php on line 221

![](https://secure.gravatar.com/avatar/b248002567790c904fa1df5165f0c192a041c034a546350f9aab9ebb427826b4?
s=60&d=retro&r=g)

### 󠀁[Works perfect across three websites!](https://wordpress.org/support/topic/works-perfect-across-three-websites/)󠁿

 [zvdh](https://profiles.wordpress.org/zvdh/) Dawout 28, 2017

I see that there are people who have issues with this plugin, but I've been very
happy with it. There could be some improvements and extended functionality, but "
as is" I'm a happy user!

![](https://secure.gravatar.com/avatar/b9bf3c490db4021b3c809f00ceece2a3675f5e8e9928c2a84054f9ca4656e7fb?
s=60&d=retro&r=g)

### 󠀁[Not working with 4.8.1](https://wordpress.org/support/topic/not-working-with-4-8-1-2/)󠁿

 [thegreenlabs](https://profiles.wordpress.org/thegreenlabs/) Dawout 22, 2017

This plugin is not working anymore?? Why it was such a good plugin too 🙁

 [ Read all 171 reviews ](https://wordpress.org/support/plugin/custom-contact-forms/reviews/)

## Contributors & Developers

“Custom Contact Forms” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ outlawgt ](https://profiles.wordpress.org/outlawgt/)
 *   [ Taylor Lovett ](https://profiles.wordpress.org/tlovett1/)

[Translate “Custom Contact Forms” into your language.](https://translate.wordpress.org/projects/wp-plugins/custom-contact-forms)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/custom-contact-forms/),
check out the [SVN repository](https://plugins.svn.wordpress.org/custom-contact-forms/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/custom-contact-forms/)
by [RSS](https://plugins.trac.wordpress.org/log/custom-contact-forms/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 7.19.1

 * Fix: Fields with a width setting (such as half width) now hide correctly when
   conditional logic hides them.
 * Fix: A required field hidden by conditional logic no longer stops the form from
   being submitted. Hidden fields, and fields in a hidden section, are skipped when
   the form is checked and are not saved with the entry.
 * Fix: Conditional logic based on checkboxes now looks at every box that is ticked.
   Unticking a box hides the fields it showed, and ticking a second box no longer
   hides them.
 * Fix: Conditional logic now checks values that are already filled in or selected
   when the page loads.
 * Fix: Survey grid answers from Custom Contact Forms Pro are saved with their question,
   such as “Delivery was on time: Agree”, instead of “null: Agree”.
 * Fix: The number next to a Custom Contact Forms Pro slider now updates as the 
   slider moves.

#### 7.19.0

 * New: An optional signup for Custom Contact Forms tips and release news, shown
   once as a card on the Forms dashboard and once in the form builder. Nothing is
   sent unless you click Subscribe, and “No thanks” is remembered on your site only.
   You can subscribe later from Forms > Settings. It replaces the one-time Pro introduction
   that used to appear in the form builder.
 * Tweak: The weekly summary email now always ends with a short note about Custom
   Contact Forms Pro on sites without Pro, and its weekly tip now always covers 
   a free feature (Mailchimp, webhooks, signatures, Akismet or Turnstile and hCaptcha).
 * Fix: Importing a WPForms form now brings over its thank-you message. Forms built
   with current versions of WPForms previously fell back to the default “Thank you
   for your submission.”
 * Tweak: The email tip under a form’s notifications now points to Email Diagnostics
   for a test email and to SMTP plugins on WordPress.org, replacing an outdated 
   single-plugin recommendation.
 * Tweak: Notification emails are now sent with the form’s name as the sender name,
   such as “Contact us”, instead of “WordPress”, when no sender name is set. The
   sending address does not change, and a sender name set in the notification or
   by an SMTP plugin still takes priority.
 * Tweak: The weekly summary email is sent with your site’s name instead of “WordPress”,
   and its per-form table lines up in more email apps.
 * Fix: When a site has no Site Title, email subjects now use the site’s address
   instead of showing empty brackets, such as “[]” in the weekly summary.
 * New: The Custom Contact Forms dashboard widget and the Forms Dashboard now show
   the three latest posts from our blog, with tips on forms, email delivery and 
   spam. See the External Services section for what this loads.

#### 7.18.0

 * New: Mailchimp. Add people who fill in a form to a Mailchimp audience, chosen
   per form, with double opt-in and an optional consent checkbox. Connect it under
   Forms  Integrations, then choose an audience under Form Settings in the form 
   builder.
 * New: Webhooks. Send each new entry as JSON to Zapier, Make, n8n or any URL, set
   per form under Form Settings, with a “Send a test” button.
 * New: hCaptcha, as an alternative to Cloudflare Turnstile and reCAPTCHA.
 * New: Akismet checks. When the Akismet plugin is set up and the option is on, 
   flagged entries go to a new spam folder under Forms  Spam instead of being thrown
   away. Move one back with “Not spam”. Spam is deleted after 30 days.
 * New: A weekly summary email every Monday with the past week’s entries, views 
   and blocked spam per form. On by default for new and existing sites; turn it 
   off from the email or under Forms  Settings.
 * New: Forms  Integrations, one page with a card for every integration, showing
   what is free, what needs Pro, and what is connected. Mailchimp, Akismet, hCaptcha
   and Cloudflare Turnstile are set up there, and their settings moved off the Settings
   page.
 * New: A “Recent problems” list on the Integrations page shows why a subscriber
   or webhook did not go through.
 * New: A “How are we doing?” card on the Forms dashboard when your forms reach 
   10, 100, 500 and 1,000 entries. Pick a star rating, and either post a review 
   on WordPress.org or send us a private note. Each milestone appears once and can
   be dismissed.
 * Tweak: The review request no longer appears as a notice across Custom Contact
   Forms screens. It now lives on the Forms dashboard only.
 * Tweak: A short line in the admin footer on Custom Contact Forms screens links
   to the WordPress.org review page.
 * Tweak: The deactivation survey includes an optional link to leave a review.
 * Tweak: When you choose to send deactivation feedback, it now also includes the
   dates of your oldest form and oldest entry, the number of entries in the last
   24 hours, and how many forms are in the trash. No entry content is sent.
 * Tweak: After a failed hCaptcha or Turnstile check, the widget resets and the 
   visitor sees a message asking them to try again.
 * Tweak: Removed an older “please rate” line that appeared next to the newer footer
   line on some screens.
 * Tweak: Custom Contact Forms Pro 1.x users with Mailchimp set up in Pro: your 
   API key and audience move to the free plugin automatically, and nothing changes
   for your forms. Pro keeps sending until you update Pro.
 * Developers: new `ccf_save_form`, `ccf_form_response`, `ccf_submission_spam_check`,`
   ccf_spam_submission`, `ccf_email_providers`, `ccf_email_marketing_subscribed`
   and `ccf_webhook_payload` hooks.

#### 7.17.0

 * New: Forms dashboard, now the first screen under Forms. It shows entries, form
   views, conversion rate and blocked spam for the last 7, 30 or 90 days or any 
   custom range, with an entries chart, a per-form table and suggested next steps.
 * New: Form views and blocked spam are now counted as daily totals, kept on your
   site. No visitor data is stored.
 * New: Signature field. Visitors sign with a mouse, finger or stylus, and the signature
   is saved as an image attached to the submission. It shows on the entries screen
   and in notification emails, and is deleted along with the submission. Existing
   signature fields created with Custom Contact Forms Pro keep working.
 * New: A one-time prompt offers to turn on WordPress automatic updates for this
   plugin. Nothing changes unless you choose to turn it on.
 * Fix: Forms created from a template or with the AI form builder now come with 
   an email notification to the site admin, so a first test submission sends an 
   email.
 * Fix: Forms imported from Contact Form 7 or WPForms sent notification emails with
   an empty body. They now include every submitted field, and file uploads are attached.
 * Tweak: The Contact Form 7 importer now uses the label text shown on your form,
   such as “How did you hear about us?”, instead of a label built from the field’s
   internal name. Acceptance checkboxes keep their wording and stay required unless
   marked optional in Contact Form 7.
 * Tweak: The AI form builder can now add signature fields.
 * Tweak: Tested up to WordPress 7.1.

#### 7.16.1

 * Security: fixed a missing authorization issue in the form update REST route. 
   Nested field and choice IDs supplied in a request are now verified to be the 
   correct post type and to belong to the form being edited before any post meta
   is written or any post is deleted. Reported by Wordfence PRISM. CVE-2026-75018.

#### 7.16

 * Tweak: A one-time introduction to Pro now appears in the form builder. It is 
   dismissible and never returns.
 * Feature: Build a form by describing it. Uses the AI provider already connected
   under Settings > Connectors, so there is no API key to enter and nothing is sent
   anywhere else. Requires WordPress 7.0 or later; the option stays hidden otherwise.
 * Tweak: PayPal added to the Pro field preview in the form builder.
 * Tweak: Deactivation feedback now reports how many submissions the forms collected
   and how long the plugin was in use.
 * Tweak: Links to the Pro site identify which screen they came from, so it is possible
   to tell which prompts are useful.
 * Fix: The Pro banner showed an old version number. It now follows the installed
   version.

#### 7.15.0

 * New: Import forms from Contact Form 7 and WPForms. Custom Contact Forms now reads
   your existing forms and rebuilds them as CCF forms: fields, labels, required 
   flags, placeholders, dropdown and radio options, and the notification recipient
   where it can be resolved. Find it under Forms > Import.
 * New: The importer never changes your original forms, tells you exactly which 
   tags it could not convert, and skips forms you have already imported instead 
   of creating duplicates. After importing it shows the new shortcode so you know
   what to swap on your pages.
 * Fix: The submission total in the dashboard widget stayed on the old figure when
   you changed the time period. It now updates with the table.
 * Tweak: The plugin’s admin form handler no longer runs on front-end page loads.
 * Tweak: If you mention an error when deactivating, the feedback form now asks 
   for the error text so problems can actually be diagnosed.
 * Tweak: If the reason you give for deactivating names something the Pro add-on
   does, the plugin says so once before deactivating. It never blocks or delays 
   deactivation.
 * Tweak: A one-time review request now appears after your forms have collected 
   ten submissions, on Custom Contact Forms screens only. Dismissing it is remembered.

#### 7.14.0

 * New: Dashboard widget: see total submissions and a per-form breakdown for the
   last 7 days, 30 days, or all time, right on your WordPress dashboard
 * New: Click any form in the widget to jump straight to its submissions
 * New: One-time notice introducing Custom Contact Forms Pro (permanently dismissible,
   admin-only, hidden when Pro is active)

#### 7.13.0

 * Refreshed plugin listing and documentation
 * Introduced Custom Contact Forms Pro: payments, signatures, PDFs, and more at 
   customformspro.com
 * Fix: The Pro field preview dialog in the form builder now displays correctly
 * New: Get Pro link on the Plugins screen (shown only when the Pro add-on is not
   active)

#### 7.12.0

 * New: Optional feedback prompt when deactivating the plugin
 * New: Developer hooks for add-ons (submission response, field rendering, submission
   preparation, and notification timing)
 * Fix: Prevent a fatal error when a field attribute lacked an escape callback
 * Fix: The form builder now handles unrecognized field types gracefully, so deactivating
   an add-on no longer breaks editing saved forms
 * Tweak: Tested up to the latest WordPress

#### 7.11.0

 * Tweak: Modernized form builder: Yes/No options now display as toggle switches
   and fields appear as cards in the canvas
 * Tweak: Friendly submission columns: the entry table now shows real field labels
   instead of internal slugs
 * Tweak: Redesigned submissions table with a cleaner, more modern style
 * Tweak: Redesigned Form Templates screen with custom template icons
 * Dev: New ccf_pre_submission_errors filter so add-ons can run final pre-save validation
 * Compatibility: Tested up to WordPress 7.0

#### 7.10.0

 * New: Form templates: prebuilt Contact, Quote Request, Newsletter, Event Registration,
   and Feedback forms under Forms  Templates
 * New: Field width controls: set fields to full, half, third, two-thirds, or quarter
   width for multi-column layouts
 * New: Minimal form theme: modern underlined-input style, selectable per form and
   per block
 * New: Custom CSS setting: add site-wide form styles from Forms  Settings
 * Tweak: Refreshed form builder with field-type icons and a cleaner, more modern
   interface

#### 7.9.1

 * Privacy: Google reCAPTCHA API is no longer loaded by default. It now loads only
   on pages that actually render a reCAPTCHA field, preventing unsolicited third-
   party requests
 * Fix: register_setting() calls updated to the modern array syntax with explicit
   sanitize_callback

#### 7.9.0

 * New maintainer: Dmitry Alexander (outlawgt)
 * Security: Full top-down code audit and hardening
 * Security: Fixed XSS vulnerability in form renderer (unescaped REQUEST_URI)
 * Security: Fixed potential SQL injection in export filter_query()
 * Security: Added capability checks to export and API delete endpoints
 * Security: Removed abandoned external Mailchimp subscription (dead URL)
 * Security: All API permission callbacks return WP_Error for proper REST responses
 * Security: Sanitized IP address and nonce inputs throughout
 * New: Gutenberg block with form selector and live server-side preview
 * New: Cloudflare Turnstile integration (Settings  Cloudflare Turnstile)
 * New: Enhanced anti-spam: improved honeypot, time-based trap, IP rate limiting
 * New: Disposable email blocking and keyword blacklist
 * New: Email diagnostics: test email button and wp_mail failure logging
 * New: Copy shortcode button in form list, edit screen, and At a Glance panel
 * New: CSV submission importer (Forms  Import CSV) with column auto-mapping
 * New: Modern responsive form CSS with proper focus states and transitions
 * New: Dark and light theme overrides with modern styling
 * New: jQuery UI datepicker modern style override
 * Fix: PHP 8+ compatibility: resolved all deprecation warnings and type errors
 * Fix: session_start() checks session_status() and headers_sent()
 * Fix: (double) cast replaced with proper int math
 * Fix: Settings page array offset on false when options not yet set
 * Fix: Null-safe array access in submission CPT formatters
 * Fix: Import bug: choices saving to wrong meta key
 * Fix: show_in_json replaced with show_in_rest
 * Fix: Removed obsolete vendored WP-API loader
 * Tweak: ABSPATH guards added to all PHP files
 * Tweak: date() replaced with wp_date(), parse_url() with wp_parse_url()
 * Tweak: wp_send_json() replaces echo json_encode() + exit pattern

#### 7.8.5

 * Prevent submissions from being accessible in API

#### 7.8.4

 * Fix WP 4.7 conflict

#### 7.8.3

 * Fix WooCommerce conflict

#### 7.8.2

 * Add $submission to ccf_email_subject filter, correct “Invalid Date” issue with
   datepicker
 * Fix WooCommerce conflict
 * Add support for Customize Posts plugin

#### 7.8.1

 * Cache busy form submission URL
 * Improve field choice UI

#### 7.8

 * Hide form title setting
 * Reply to notification fields
 * Activate form notifications by default

#### 7.7

 * New CAPTCHA option
 * Fix “0” choice input bug
 * Fix empty conditional bug
 * Reset field renderer bug fixed
 * Guide user for whitelisting file extensions in file field
 * Submit class form option
 * Logged in users only form option

#### 7.6

 * Form duplication
 * Fix multiple section header bug
 * Button class field

#### 7.5

 * Conditional fields and sections
 * [current_date_time] notification variable

## Meta

 *  Version **7.19.1**
 *  Last updated **2 jou ago**
 *  Active installations **6,000+**
 *  WordPress version ** 5.0 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/custom-contact-forms/)
 * Tags
 * [contact form](https://hat.wordpress.org/plugins/tags/contact-form/)[custom form](https://hat.wordpress.org/plugins/tags/custom-form/)
   [form builder](https://hat.wordpress.org/plugins/tags/form-builder/)[spam protection](https://hat.wordpress.org/plugins/tags/spam-protection/)
   [turnstile](https://hat.wordpress.org/plugins/tags/turnstile/)
 *  [Advanced View](https://hat.wordpress.org/plugins/custom-contact-forms/advanced/)

## Ratings

 3.5 out of 5 stars.

 *  [  87 5-star reviews     ](https://wordpress.org/support/plugin/custom-contact-forms/reviews/?filter=5)
 *  [  19 4-star reviews     ](https://wordpress.org/support/plugin/custom-contact-forms/reviews/?filter=4)
 *  [  11 3-star reviews     ](https://wordpress.org/support/plugin/custom-contact-forms/reviews/?filter=3)
 *  [  8 2-star reviews     ](https://wordpress.org/support/plugin/custom-contact-forms/reviews/?filter=2)
 *  [  46 1-star reviews     ](https://wordpress.org/support/plugin/custom-contact-forms/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/custom-contact-forms/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/custom-contact-forms/reviews/)

## Contributors

 *   [ outlawgt ](https://profiles.wordpress.org/outlawgt/)
 *   [ Taylor Lovett ](https://profiles.wordpress.org/tlovett1/)

## Support

Issues resolved in last two months:

     0 out of 1

 [View support forum](https://wordpress.org/support/plugin/custom-contact-forms/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://customformspro.com/)