Description
Most WordPress websites only need a simple contact form. You shouldn’t have to use a complex form builder just to receive a message from your website.
Simple Contact Form makes it easy to add an accessible contact form to your WordPress website in minutes. It includes effective built-in spam protection and works without complicated setup or unnecessary features.
Everything you need for a regular contact form is included for free. There is no premium version and no paid extensions.
Add your contact form using the block editor or a shortcode and you’re ready to receive messages.
Features
- Accessible contact forms with server-side and browser-side field validation
- Choose between AJAX submission with a non-JavaScript fallback or AJAX-only submission
- Create multiple contact forms using a simple WordPress interface
- Add forms using the block editor or the
[fws_contact_form id="X"]shortcode - Protect forms using a honeypot and a minimum submission time
- Add a simple and accessible challenge to individual forms
- Optional Cloudflare Turnstile protection
- Optional integration with WP Armour – Honeypot Anti Spam
- Optionally block messages containing links
- Optionally block submissions from selected countries using Country.is
- Optional email address and disposable address verification using Maileroo
- Store submissions globally or for selected forms
- View recent spam attempts in the WordPress dashboard
- Download the spam log through a protected administrator action
- Create multiple HTML responder emails
- Send notification and responder emails using the WordPress wp_mail() function
- Supports multiple notification recipients, responder Bcc addresses and custom mail headers
- Optional fields for company name, phone number, website and terms acceptance
- Optional redirect to a thank-you page after a successful submission
- Track successful AJAX submissions in Google Analytics or Clicky
- Optionally load the plugin stylesheet
The plugin is designed to stay simple. If you need a complex form or a visual form builder, another form plugin may be a better choice.
The country blocking option uses the IP-to-country API from Country.is. This service does not require an API key.
Screenshots







Installation
The quickest method for installing the contact form is:
- Install the plugin using the built-in WordPress plugin installer, or upload the entire
fws-ajax-contact-formfolder to the/wp-content/plugins/directory. - Activate the plugin through the ‚Plugins‘ menu in WordPress.
- Open Contact form > Settings and configure the required options.
- Create a form and add it to a page using the block editor or the shortcode
[fws_contact_form id="X"], where X is the ID of the form. - Optionally create a responder email and select it in the form settings.
Visit our website for additional information.
FAQ
-
Does the contact form work without JavaScript?
-
That depends on the selected submission method.
The «AJAX with a non-JavaScript fallback» mode submits the form using AJAX when JavaScript is available. Without JavaScript, the form is submitted through the regular WordPress form handler.
The «AJAX only – JavaScript required» mode does not accept submissions without JavaScript.
-
What is the difference between the accessible challenge and Cloudflare Turnstile?
-
The accessible challenge is generated by the plugin and does not require an external service or JavaScript.
Cloudflare Turnstile is an optional external spam protection service. It requires JavaScript in the visitor’s browser and valid Turnstile site and secret keys.
When the non-JavaScript fallback is enabled, an accessible challenge can be used to protect submissions made without JavaScript.
-
External requests are only made when the corresponding option is enabled.
Country.is receives the visitor’s IP address when country blocking is configured. Maileroo receives the submitted email address when email verification is enabled. Cloudflare receives the Turnstile verification data when Turnstile is configured.
-
What is the difference between Maileroo email verification and the Maileroo SMTP plugin?
-
Maileroo email verification checks whether a submitted email address can be accepted. The Maileroo SMTP plugin is a separate plugin that can deliver WordPress emails through Maileroo. Either feature can be used independently.
-
What should I do when the spam log file cannot be created?
-
The plugin uses standard file permissions for its spam log. If your hosting environment requires different permissions, ask your hosting provider which file permission should be used.
You can define
FWSACF_CHMOD_FILEinwp-config.phpusing the value recommended by your hosting provider. -
How to add a manual goal in Clicky?
-
If you use a Clicky premium plan it’s possible to track Goals.
- In Clicky, go to Goals > Setup > Create a new goal.
- Enter a name for the goal
- Check the «Manual Goal» checkbox and click Submit
- Copy/paste the ID into the field from the plugin options page
-
How to use the «fwsacf_after_success_form» action hook?
-
Use the following action hook in your theme’s function.php file. For example you can submit the email address and name to your CRM or email marketing system to send out some follow up emails.
add_action('fwsacf_after_success_form', function($form) { // Your code here... // and use the array values $form['email'] and $form['name'] where needed }); -
How to use the dynamic subject feature?
-
Using this feature is easy, just add the subject text as query string to the page URL where your contact form is located, for example: https://domain.com/contact/?dynsubject=yourtexthere
-
How can I report security bugs?
-
You can report security bugs through the Patchstack Vulnerability Disclosure Program. The Patchstack team help validate, triage and handle any security vulnerabilities. Report a security vulnerability.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Simple Contact Form – Accessible & Anti-Spam” is open source software. The following people have contributed to this plugin.
Contributors“Simple Contact Form – Accessible & Anti-Spam” has been translated into 1 locale. Thank you to the translators for their contributions.
Translate “Simple Contact Form – Accessible & Anti-Spam” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.6.1
- Enhancement
- Added an option to remove all plugin settings and stored data during uninstall. Plugin data is preserved by default.
- Other
- Changed the name from Ajax Conact Form into Simple Contact Form
1.6.0
-
Enhancements
- Added a choice between AJAX submission with a non-JavaScript fallback and AJAX-only submission.
- Rebuilt the form processing flow using separate classes for requests, validation, spam protection, submissions and email delivery.
- Rebuilt the administration code for forms, responders, submissions, settings and spam logs.
- Improved the order and separation of spam checks.
- Improved the integration between Cloudflare Turnstile and the accessible form challenge.
- Improved required-field validation for optional form fields.
- Added structured error codes for failed validation and spam checks.
- Improved the spam log dashboard and added a protected log download.
- Added logging for submissions blocked by country.
- Improved the HTML templates for administrator and responder emails.
- Added a mail transport interface to support future email delivery integrations.
- Improved support for multiple recipients, responder Bcc addresses and custom mail headers.
- Improved the settings page and tab navigation.
- Improved the form, responder and submission management screens.
-
Bug fixes
- Fixed header warnings caused by setting the form load-time cookie too late.
- Fixed missing form configuration values for the challenge and optional fields.
- Fixed administrator emails being sent without the HTML email template.
- Fixed several missing or duplicated components left over from the procedural implementation.
- Fixed translation loading being triggered before the WordPress init action.
- Fixed settings fields not being displayed or saved correctly.
- Fixed validation and display of responder email fields.
- Fixed the spam log file permission handling.
-
Other
- Removed the hCaptcha integration.
- Refactored most procedural plugin code into reusable and testable classes.
1.5.7
- Enhancement
- Option to add custom mail headers to each form post.
1.5.6
-
Enhancement
- Improved authentication for non-JS sessions. Spam checks that use JavaScript are now bypassed when JS is disabled.
- Formfield validation for form post and responder, the important fields are now checked when saving.
- The possibility to add multiple to: email addresses.
- Bcc: Option for responder emails.
- Option to add a reply-to header based on the sender’s email address.
-
Other
- We removed the Google reCaptcha integration, use Cloudflare Turnstile or hCapchta instead.
1.5.5.1
- Bug fixes
- The function that creates the directory for the spam attempt log file was missing.
1.5.5
- Enhancement
- A log file to monitor spam attempts. Get insights which spam protection feature works the best for your form(s). Enable this feature via the advanced spam options.
- Added a new Gutenberg block to insert the shortcode from a list
- Added spam protection with Cloudflare Turnstyle. Add your API keys to enable the function.
- The message for the site owner has been updated; it now only displays the values of the completed fields. A link to the submission post is also displayed.
- The shortcode of a form is now also shown in the list of forms
- The Mailer Email Verification API no longer requires a valid API key. You can enable or disable it.
- For added spam protection, you can now add a challenge to your form. See our guide for more information.
- If an external service (Mailroo, Cloudflare Turnstile, or hCaptcha) is unavailable, the validation function will always return a valid validation. This is necessary to prevent legitimate visitors from using your contact form. This will rarely happen, but it’s just a safety precaution.
- Other
- Google’s reCaptcha security is inaccessible and has therefore been completely removed. Use Cloudflare Turnstile or hCaptcha instead.
1.5.4
- Enhancement
- Changed the table layout for the admin message to make it better readable (on mobile).
- Added the country code to the meta data for the admin message.
- Added an option to block submission with URL’s inside the message
- Moved some settings to the new tab «Advanced anti-spam settings»
- Improved the form submission log detail page
1.5.3
- Enhancement
- (Beta) Option to verify/block disposable email addresses
- Added a new option to change the delay value (15 seconds) for form submissions
- Other
- The «fwsacf_after_success_form» action hook has been around for a while. Our manual now includes an example showing you how to send a subscriber to EmailOctopus using the hook.
1.5.2
- Bug fixes
- Added extra validation for the external email verification API
- Fixed some warnings for empty variables
- Enhancement
- Added a blueprint.json file for quick testing
1.5.1
-
Bug fixes
- There was an issue with Maileroo email verifification, which is fixed
-
Enhancement
- After submitting a form (via Ajax), the window scrolls now to the position of the message.
1.5.0
- Enhancement
- Each form works now without Javascript.
- Email verification via the Maileroo API
- Better and accessible form field validation features
- Many updates for accessibility
- Admin notifications using the HTML email template
1.4.1
- Bug fixes
- Fixed and issue inside the Ajax response. The message after submitting a form is working again.
- Added a test for existing post meta fields, that the form defaults are used im logical way.
1.4.0
- Enhancement
- Improved the form submission data page
- New form fields for company, phone number, website and accept terms
- Expanded the form field validation for the new fields
- Validation (client and server side) for the accept terms option
- Improved the form style
1.3.0
- Enhancement
- With this version it is possible to enter a form via a post/form interface. The shortcode function still exists, but I advise to convert your forms as soon as possible.
- The reply-to header is removed, because this header can increase the risk that your notification will go into the spam box.
- The settings page has been re-organized.
- Minor text changes
1.2.6
- Bug fixes
- Code optimization, mainly adding additional cleanup functions to variables.
1.2.5.1
- Bug fixes
- Another fix for the settings page.
1.2.5
- Bug fixes
- Fixed and updated the settings page (which was broken after the last update)
1.2.4
- Enhancement
- We replaced the IP Stack API with Country.is. Their API service is free and no API key is required. You don’t need to change anything.
1.2.3
- Enhancement
- Enable/disable the collection of form submissions globally or for each form
1.2.2
- Enhancement
- Integration with WP Armour – Honeypot Anti Spam
1.2.1.1
- Bug fixes
- Removed the «pause(500)» JS function which was used to delay Clicky tracking in previous versions.
1.2.1
- Enhancement
- Responsive email template for the responder emails
- Two new fields for the responder email (pre header and footer)
1.2.0
- Enhancement
- New feature: Spam protection via hCaptcha (as an privacy friendly alternative to Google reCAPTCHA)
- New feature: Spam protection using a honeypot and cookies. Note, from now these two options are always.
- Some style corrections to play a bit nicer with the Captcha challenges.
- Updated the Dutch translations
1.1.4.1
- Bug fixes
- removed some un-commented debug code from the plugin file
- fixed an error for the Google Analytics tracking inside the JS file
1.1.4
- Enhancement
- New feature: Contact form submission, all submitted forms are stored in a custom post type.
- New feature: Send out responder emails to the person who send you a message via your contact form.
- The plugin has now a custom menu where you can find the submissions and the plugin settings.
1.1.3.1
- Bug fixes
- In some situations the reCAPTCHA response was requested too late. We changed the function to get working. Please post to the WordPress forums if you see any issues.
1.1.3
-
Enhancement
- Use the new action hook «fwsacf_after_success_form» to add your custom functionality right after the form was submitted successfully. Check the FAQ for an example.
- New shortcode attribute for an optional class inside an HTML form element.
- Dynamic subject, check the FAQ for information on how to use this function.
-
Other
- You can now show or hide the phone number field via the shortcode attribute «show_phone».
- Fixed the tabindex sequence because of the optional form fields
- Changed form CSS style a little (including some cleanup)
- Updated the Dutch translations
1.1.2
- Enhancement
- We moved the options page code from the plugin file to a separate options page file. This way it’s easier to add more options (in the future).
- New feature: Add a thank you page. Enter the URL and the visitor is redirected to a page of your choice (after the contact form was successfully submitted).
- All static assets are moved to the new directory «assets»
1.1.1
We solved a bug for the reCAPTCHA function. There was a problem inside the code, which marked a message as spam if it takes more than 2 minutes to send a message. Just update and the problem is gone.
- Enhancement
- We changed the JavaScript code a bit to prevent a double submission (which was also a problem for the reCAPTCHA verification).
1.1.0
After more than 3 years a new version. The plugin worked during the whole time and it was compatible with all past WordPress versions (I use the plugin on my own website). This version has some new features and the Mailgun email address validation is removed. Please check the settings page after the update and modify the settings if necessary. Check also the translations, besides the news string, some of them are replaced by new ones.
-
Enhancement
- New feature: Prevent spam by blocking countries if they are not relevant for your website.
- New feature: Fight spam using Google reCAPTCHA v3.
- Update: The tracking feature for Google Analytics is updated. We now support the gtag.js version.
- Update: The feature for multiple subjects is improved.
- Update: The callback function is now using WordPress functions for sanitizing the field values.
- Update: The form has now a field for a phone number (it’s not a required field)
-
Other
- The Mailgun email address validation feature is removed.
1.0.5.1
- Other
- The plugin is tested for WordPress 4.8.1
1.0.5
-
Other
- Replaced the link for the «Codestyling Localization» plugin. The plugin doesn’t exist anymore, I added a link to «Loco Translate» instead.
-
The plugin is tested for WordPress 4.2
-
Bug fixes
- Fixed some issues with the (Dutch) translation files
-
Enhancement
- The contact form message is filtered now by using the function wp_kses() before the message is added to the email message
1.0.4
-
Other
- Added .pot file for translations
-
Bug fixes
- Removed the IF statement for the API key value inside the shortcode function. Since version 1.03 the API key isn’t required anymore.
- Fixed a view option name values inside the function FWS_ajax_contactform_action_callback()
-
Enhancement
- Added Dutch translations
- Added a new option to change the «thank you message» (I keep the old text as fallback option)
- Code optimizations (replaced standard PHP functions and code with native WordPress functions)
- Added default options to plugin values (where possible)
- New: Uninstall function – All plugin option are gone on removal
1.0.3
-
Other
- Added updated screenshots
-
Bug fixes
- The object name used for wp_localize_script is changed because of possible conflicts with other plugins or themes
-
Enhancement
- The Mailgun email address validation feature is now optional. The validation process is also moved from client side code (JS) to the server side code (PHP).
- Before the form gets submitted, a simple email address validation (regular expression) is done.
- Now it’s possible to enter multiple subjects for the email message. These subjects are used to create a SELECT menu for the contact form
- It’s possible now to translate the complete plugin
1.0.2.1
- Other
- Added icons for the plugin repository
- The plugin is tested for WordPress 4.0
- Added instructions for using the track Clicky goal feature
- Added an updated screenshot for the plugin settings
1.0.2
-
Bug fixes
- Removed some typos in the text
-
Enhancement
- Simple goal or conversion tracking for Google Analytics and Clicky
1.0.1
-
Bug fixes
- Fixed the name for the nonce verification
- Removed the bug for the wrong addressing of the Ajax call back function
-
Enhancement
- Added some screenshots and FAQ’s
- Overwrite the mail subject global setting by using a shortcode attribute
1.0
- Initial release
