{"id":171176,"date":"2023-02-28T12:45:45","date_gmt":"2023-02-28T12:45:45","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/essential-form\/"},"modified":"2025-12-04T10:44:33","modified_gmt":"2025-12-04T10:44:33","slug":"essential-form","status":"publish","type":"plugin","link":"https:\/\/tt.wordpress.org\/plugins\/essential-form\/","author":15497876,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.2","stable_tag":"1.0.2","tested":"6.9.4","requires":"4.6","requires_php":"7.2","requires_plugins":null,"header_name":"Essential Form","header_author":"Jose Mortellaro","header_description":"The lightest contact form for WordPress. It's so essential you'll either love it or hate it. Ultra lightweight and no spam.","assets_banners_color":"273040","last_updated":"2025-12-04 10:44:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/josemortellaro.com\/essential-form\/","header_author_uri":"https:\/\/josemortellaro.com\/","rating":4.9,"author_block_rating":0,"active_installs":500,"downloads":5850,"num_ratings":19,"support_threads":2,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.0.1":{"tag":"0.0.1","author":"giuse","date":"2023-02-28 15:49:09"},"0.0.2":{"tag":"0.0.2","author":"giuse","date":"2023-02-28 23:16:03"},"0.0.3":{"tag":"0.0.3","author":"giuse","date":"2023-03-02 17:22:14"},"0.0.4":{"tag":"0.0.4","author":"giuse","date":"2023-08-09 07:50:40"},"0.0.5":{"tag":"0.0.5","author":"giuse","date":"2023-11-07 21:20:46"},"0.0.6":{"tag":"0.0.6","author":"giuse","date":"2024-03-19 20:34:59"},"0.0.6.RC-1":{"tag":"0.0.6.RC-1","author":"giuse","date":"2024-02-27 19:59:50"},"0.0.7":{"tag":"0.0.7","author":"giuse","date":"2024-05-16 21:55:11"},"0.0.8":{"tag":"0.0.8","author":"giuse","date":"2024-05-18 12:39:48"},"0.0.9":{"tag":"0.0.9","author":"giuse","date":"2024-07-12 14:30:35"},"1.0.0":{"tag":"1.0.0","author":"giuse","date":"2025-04-18 11:09:11"},"1.0.1":{"tag":"1.0.1","author":"giuse","date":"2025-07-27 17:19:27"},"1.0.2":{"tag":"1.0.2","author":"giuse","date":"2025-12-04 10:44:33"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":1,"5":18},"assets_icons":{"icon-128x128-rtl.png":{"filename":"icon-128x128-rtl.png","revision":2872333,"resolution":"128x128","location":"assets","locale":""},"icon-128x128.png":{"filename":"icon-128x128.png","revision":2872333,"resolution":"128x128","location":"assets","locale":""},"icon-256x256-rtl.png":{"filename":"icon-256x256-rtl.png","revision":2872333,"resolution":"256x256","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":2872333,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500-rtl.png":{"filename":"banner-1544x500-rtl.png","revision":2872333,"resolution":"1544x500","location":"assets","locale":""},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":2872333,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250-rtl.png":{"filename":"banner-772x250-rtl.png","revision":2872333,"resolution":"772x250","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":2872333,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.0.1","0.0.2","0.0.3","0.0.4","0.0.5","0.0.6","0.0.6.RC-1","0.0.7","0.0.8","0.0.9","1.0.0","1.0.1","1.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2656,358,267,218510,4034],"plugin_category":[41,54],"plugin_contributors":[157933],"plugin_business_model":[],"class_list":["post-171176","plugin","type-plugin","status-publish","hentry","plugin_tags-anti-spam","plugin_tags-contact-form","plugin_tags-email","plugin_tags-leightweight","plugin_tags-light","plugin_category-communication","plugin_category-security-and-spam-protection","plugin_contributors-giuse","plugin_committers-giuse"],"banners":{"banner":"https:\/\/ps.w.org\/essential-form\/assets\/banner-772x250.png?rev=2872333","banner_2x":"https:\/\/ps.w.org\/essential-form\/assets\/banner-1544x500.png?rev=2872333","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/essential-form\/assets\/icon-128x128.png?rev=2872333","icon_2x":"https:\/\/ps.w.org\/essential-form\/assets\/icon-256x256.png?rev=2872333","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Looking for a no-fuss, ultra-lightweight contact form that just works? <strong>Essential Form<\/strong> gives you exactly what you need \u2014 no more, no less.<\/p>\n\n<p>Use the shortcode <code>[essential_form]<\/code> wherever you want a simple contact form with the following fields:<\/p>\n\n<ul>\n<li>Name<\/li>\n<li>Email<\/li>\n<li>Message<\/li>\n<li>Agreement checkbox<\/li>\n<\/ul>\n\n<p>That\u2019s it. No extra fluff, no performance hit.<\/p>\n\n<h4>\u26a1 Zero Bloat. Zero Requests. Zero Spam.<\/h4>\n\n<p>Essential Form adds <strong>no HTTP requests<\/strong>, loads <strong>no external libraries<\/strong>, and runs on <strong>pure Vanilla JavaScript<\/strong> \u2014 only <strong>1 kB of inline script<\/strong>, injected <strong>only on pages with a form<\/strong>. When we say it\u2019s the lightest contact form ever made, we mean it. The entire plugin zip is just <strong>14 kB<\/strong>.<\/p>\n\n<h4>\ud83d\udee1\ufe0f Anti-Spam, Reinvented (No Captchas, Ever)<\/h4>\n\n<p>Our <strong>invisible anti-spam system<\/strong> blocks all automated bots \u2014 no annoying captchas, no puzzles, no headaches. Here\u2019s how it works:<\/p>\n\n<ul>\n<li>Each form submission uses a <strong>unique, random token<\/strong><\/li>\n<li><strong>20 random security keys<\/strong> are generated per site<\/li>\n<li>AJAX actions have <strong>unpredictable names<\/strong> like <code>essential_form_fbe52b696<\/code><\/li>\n<li>Robots can\u2019t guess or simulate a valid submission<\/li>\n<\/ul>\n\n<p>The result? <strong>Only real humans<\/strong> get through. Bots don\u2019t stand a chance.<\/p>\n\n<h4>\ud83e\uddd8\u200d\u2640\ufe0f Keep It Simple<\/h4>\n\n<p>Most of the time, all you need is a name, email, message, and a simple checkbox. That\u2019s exactly what Essential Form gives you. If you need complex forms with extra fields or logic, this plugin isn\u2019t for you \u2014 try Contact Form 7 instead.<\/p>\n\n<p>But if you want something fast, clean, and incredibly secure, <strong>Essential Form<\/strong> is for you.<\/p>\n\n<p><strong>Try Essential Form today \u2014 and enjoy a faster, cleaner contact form experience.<\/strong><\/p>\n\n<h3>How to add a contact form on the page<\/h3>\n\n<ul>\n<li>Add the shortcode [essential_form]<\/li>\n<li>Done!<\/li>\n<\/ul>\n\n<h3>Features of the Contact Form<\/h3>\n\n<ul>\n<li><p><strong>Extremely lightweight<\/strong> \u2013 The plugin inlines about 1 kB of pure Vanilla JavaScript (even smaller when compressed) only on the page where you use the shortcode \u2014 and <strong>never above the fold<\/strong>. On all other pages, it doesn't exist at all. You could say it only \"exists\" on a page because the form is visible \u2014 otherwise, you'd never know the plugin is there. No tool will be able to measure any meaningful resource usage caused by this plugin.<\/p><\/li>\n<li><p>The <strong>contact form<\/strong> includes only four fields: name, email, message, and an agreement checkbox. Nothing else. If you need more fields, this plugin isn\u2019t for you. But if that\u2019s all you need \u2014 you\u2019ll love how simple and fast it is.<\/p><\/li>\n<li><p>It <strong>inherits your theme\u2019s styles<\/strong> automatically. If you want custom styling, you can add your own CSS \u2014 or use a different plugin if you need more built-in design options.<\/p><\/li>\n<li><p>It includes a <strong>powerful, invisible anti-spam system<\/strong>. Bots won\u2019t be able to send messages through your form. Only real humans can submit it \u2014 and if you ever get spam, it will be from a human doing it manually.<\/p><\/li>\n<li><p><strong>No captchas, no puzzles, no user frustration.<\/strong> The anti-spam system works entirely behind the scenes \u2014 quietly and effectively.<\/p><\/li>\n<\/ul>\n\n<h3>Shortcode Parameters<\/h3>\n\n<p>You can customize the form labels and messages using these shortcode parameters:<\/p>\n\n<ul>\n<li><code>label_email<\/code><\/li>\n<li><code>label_message<\/code><\/li>\n<li><code>button_text<\/code><\/li>\n<li><code>agreement_text<\/code><\/li>\n<li><code>success_message<\/code><\/li>\n<\/ul>\n\n<p><strong>Example usage:<\/strong><\/p>\n\n<pre><code>[essential_form label_email=\"Your email\" label_message=\"Your message\" button_text=\"Send\" agreement_text=\"You agree with our privacy policy\" success_message=\"Thank you for your message!\"]\n<\/code><\/pre>\n\n<p>If you don\u2019t provide these parameters, the plugin will use the default values.<\/p>\n\n<h3>How to customize the contact forms<\/h3>\n\n<p>You can also customize the contact forms throught the filter hook 'essential_form_settings'.<\/p>\n\n<p>Here an example.<\/p>\n\n<pre><code>add_filter( 'essential_form_settings',function( $options ){\n    return array(\n        'email_from' =&gt; 'youremail@mail.com',\n        'email_to' =&gt; 'youremail@mail.com',\n        'email_subject' =&gt; sprintf( esc_html__( 'Message from %s','your-domain' ),get_bloginfo( 'name' ) ),\n        'label_name' =&gt; __( 'Name','your-domain' ),\n        'label_email' =&gt; __( 'Email','your-domain' ),\n        'label_message' =&gt; __( 'Message','your-domain' ),\n        'button_text' =&gt; __( 'Send','your-domain' ),\n        'agreement_text' =&gt; __( 'By submitting this form I agree with the privacy policy','your-domain' ),\n        'success_message' =&gt; __( 'Form submitted successfully! Thank you for your message!','your-domain' ),\n        'name_missing_error' =&gt; __( 'Name is a required field!','your-domain' ),\n        'email_missing_error' =&gt; __( 'Email is a required field!','your-domain' ),\n        'email_not_valid_error' =&gt; __( 'Email not valid!','your-domain' ),\n        'message_missing_error' =&gt; __( 'Message is a required field!','your-domain' ),\n        'message_too_long_error' =&gt; __( 'This message is too long! Please, write not more than 50000 characters.','your-domain' ),\n        'missing_agreement_error' =&gt; __( 'You have to agree with our privacy policy to submit the form.','your-domain' )\n    );\n} );\n<\/code><\/pre>\n\n<p>If you need to do a custom action after the sending of the email, you can use the action hook 'essential_form_after_sending'.<\/p>\n\n<p>Here an example.<\/p>\n\n<pre><code>add_action( 'essential_form_after_sending',function( $name,$email,$message,$post_id ){\n\n    \/\/$name is the name of the user who submitted the contant form\n    \/\/$message is the message which is sent through the contact form\n    \/\/$post_id is the ID of the page where is included the contact form\n\n    \/\/Your code here\n\n},10,4 );\n<\/code><\/pre>\n\n<p>If you need to customize the message that is included in the email, use the filter hook 'essential_form_message'.<\/p>\n\n<p>Here you have an example.<\/p>\n\n<pre><code>add_filter('essential_form_message',function( $message,$name,$email,$post_id ){\n    if( isset( $_SERVER['REMOTE_ADDR'] ) ){\n        $message .= '&lt;p&gt;IP: '.sanitize_text_field( $_SERVER['REMOTE_ADDR'] ).'&lt;\/p&gt;';\n    }\n    return $message;\n},10,4 );\n<\/code><\/pre>\n\n<p>If you need to customize the agreement text, use the filter hook 'essential_form_agreement_text'.<\/p>\n\n<p>Here you have an example.<\/p>\n\n<pre><code>add_filter( 'essential_form_agreement_text',function( $text ){\n    return 'By submitting this form I agree with the &lt;a href=\"https:\/\/yourdomain.com\/privacy-policy\/\"&gt;Privacy Policy&lt;\/a&gt;';\n} );\n<\/code><\/pre>\n\n<h3>Limitations<\/h3>\n\n<p>The limits of <a href=\"https:\/\/wordpress.org\/plugins\/essential-form\/\">Essential Form<\/a> are many, but they are what make this plugin the best if you need a ultra-lightweight contact form with just name, email, comment, and privacy agreement.\nIf you need more, you can always install more complete but also heavier contact forms like:<\/p>\n\n<p><a href=\"https:\/\/wordpress.org\/plugins\/contact-form-7\/\">Contact Form 7<\/a>\n<a href=\"https:\/\/wordpress.org\/plugins\/wpforms-lite\/\">WPForms<\/a>\n<a href=\"https:\/\/wordpress.org\/plugins\/forminator\/\">Forminator<\/a>\n<a href=\"https:\/\/wordpress.org\/plugins\/formidable\/\">Formidable Forms<\/a>\n<a href=\"https:\/\/wordpress.org\/plugins\/ninja-forms\/\">Ninja Forms<\/a><\/p>\n\n<p>and many other amazing plugins for contact forms.<\/p>\n\n<h3>How to speed up the form submission and avoid conflicts with other plugins<\/h3>\n\n<ul>\n<li>Install and activate <a href=\"https:\/\/wordpress.org\/plugins\/freesoul-deactivate-plugins\/\">Freesoul Deactivate Plugins<\/a><\/li>\n<li>Go to Freesoul Deactivate Plugins =&gt; Plugin Manger =&gt; Actions =&gt; Essential Form<\/li>\n<li>Deactivate all the plugins for the actions \"Getting secret key during submission\" and \"Form submission\"<\/li>\n<\/ul>\n\n<p>By using <a href=\"https:\/\/wordpress.org\/plugins\/freesoul-deactivate-plugins\/\">Freesoul Deactivate Plugins<\/a> to clean up all the other plugins, the form submission will be faster and without any conflict with third plugins.<\/p>\n\n<h3>Demo<\/h3>\n\n<p>You can see <a href=\"https:\/\/wordpress.org\/plugins\/essential-form\/\">Essential Form<\/a> in action on my blog post <a href=\"https:\/\/josemortellaro.com\/the-lightest-contact-form-plugin-ever\/\">The Lightest Contact Form Plugin Ever<\/a>\nYou don't need any demo for the backend, because there are no settings for this plugin. Just use the shortcode [essential_form] where you want to add the form, and customized as mentioned in the description.<\/p>\n\n<h4>I need this plugin to do something custom<\/h4>\n\n<p>If you want to integrate this plugin with other tools or workflows, I offer a custom development service for WordPress plugin integrations and feature extensions.<br \/>\nLearn more about <a href=\"https:\/\/josemortellaro.com\/advanced-functionality-for-wordpress\/\">advanced custom functionality for WordPress<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/essential-form<\/code> directory, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Add the shortcode <code>[essential_form]<\/code> to any post, page, or widget where you want the contact form to appear.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='can%20i%20add%20more%20fields%3F'><h3>Can I add more fields?<\/h3><\/dt>\n<dd><p>No. Essential Form is intentionally minimal. It includes only name, email, message, and agreement checkbox.<\/p><\/dd>\n<dt id='does%20it%20work%20with%20caching%20plugins%3F'><h3>Does it work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes, it's compatible with most caching setups because the form token is dynamically handled.<\/p><\/dd>\n<dt id='does%20it%20support%20ajax%20submissions%3F'><h3>Does it support AJAX submissions?<\/h3><\/dt>\n<dd><p>Yes, form submissions use AJAX to send messages without reloading the page.<\/p><\/dd>\n<dt id='is%20it%20gdpr-compliant%3F'><h3>Is it GDPR-compliant?<\/h3><\/dt>\n<dd><p>Yes. No data is stored on your server. Everything is handled via email, and the agreement checkbox helps you get user consent.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added: filter hook 'essential_form_include_source_in_email' to include or not the source page info in the email.<\/li>\n<li>Fix: mispelled words in the text before the main message.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added: filter hook 'essential_form_submit_style' to customize the submit button style.<\/li>\n<li>Fix: privacy policy page not taken on multisites.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Added: label of the checkbox agreement is now clickable.<\/li>\n<\/ul>\n\n<h4>0.0.9<\/h4>\n\n<ul>\n<li>Fix: line spaces removed in the email message.<\/li>\n<\/ul>\n\n<h4>0.0.8<\/h4>\n\n<ul>\n<li>Added: translated in French. Many thanks to @queertimes for the translation.<\/li>\n<li>Fixed: translation files not loaded from the WordPress language directory.<\/li>\n<\/ul>\n\n<h4>0.0.7<\/h4>\n\n<ul>\n<li>Added: translated in German. Many thanks to @cutu234 for the translation.<\/li>\n<li>Added: possibility to remove only the agreement checkbox without removing the text by using the filter add_filter( 'essential_form_agreement_checkbox_required', '__return_empty_string' );<\/li>\n<\/ul>\n\n<h4>0.0.6<\/h4>\n\n<ul>\n<li>Added: possibility to remove the agreement checkbox by adding define( 'ESSENTIAL_FORM_ASK_FOR_AGREEMENT', false ); in wp-config.php<\/li>\n<\/ul>\n\n<h4>0.0.5<\/h4>\n\n<ul>\n<li>Improved: increased the expiration time of the random key<\/li>\n<\/ul>\n\n<h4>0.0.4<\/h4>\n\n<ul>\n<li>Added: integration with Freesoul Deactivate Plugins to unload all the other plugins during the form submission<\/li>\n<\/ul>\n\n<h4>0.0.3<\/h4>\n\n<ul>\n<li>Fix: warning on activation<\/li>\n<\/ul>\n\n<h4>0.0.2<\/h4>\n\n<ul>\n<li>Added: allowed link in the privacy aggreement chcekbox<\/li>\n<li>Translated in Italian<\/li>\n<\/ul>\n\n<h4>0.0.1<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"The lightest contact form for WordPress. It&#039;s so essential you&#039;ll either love it or hate it. Ultra lightweight and no spam.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/171176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=171176"}],"author":[{"embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/giuse"}],"wp:attachment":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=171176"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=171176"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=171176"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=171176"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=171176"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=171176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}