{"id":353162,"date":"2026-08-23T13:47:52","date_gmt":"2026-08-23T13:47:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/gridxflex-contact-forms\/"},"modified":"2026-08-23T13:47:32","modified_gmt":"2026-08-23T13:47:32","slug":"gridxflex-contact-forms","status":"publish","type":"plugin","link":"https:\/\/sa.wordpress.org\/plugins\/gridxflex-contact-forms\/","author":23474364,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"GridXFlex Contact Forms","header_author":"Grid X Flex","header_description":"Simple, customizable, responsive contact form builder for WordPress. Multiple forms, Gutenberg block + shortcode, spam protection, and a submissions dashboard.","assets_banners_color":"6d9493","last_updated":"2026-08-23 13:47:32","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/gridxflex\/gridxflex-contact-forms","header_author_uri":"https:\/\/github.com\/gridxflex","rating":0,"author_block_rating":0,"active_installs":0,"downloads":48,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"gridxflex","date":"2026-08-23 13:47:32"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3661927,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3661927,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3661927,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3661927,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3661927,"resolution":"1","location":"assets","locale":"","width":1198,"height":562},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3661927,"resolution":"10","location":"assets","locale":"","width":1173,"height":560},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3661927,"resolution":"11","location":"assets","locale":"","width":1365,"height":563},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3661927,"resolution":"12","location":"assets","locale":"","width":1363,"height":568},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3661927,"resolution":"13","location":"assets","locale":"","width":1346,"height":562},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3661927,"resolution":"2","location":"assets","locale":"","width":1121,"height":570},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3661927,"resolution":"3","location":"assets","locale":"","width":1123,"height":562},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3661927,"resolution":"4","location":"assets","locale":"","width":1121,"height":548},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3661927,"resolution":"5","location":"assets","locale":"","width":1121,"height":483},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3661927,"resolution":"6","location":"assets","locale":"","width":1114,"height":557},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3661927,"resolution":"7","location":"assets","locale":"","width":1189,"height":555},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3661927,"resolution":"8","location":"assets","locale":"","width":1288,"height":600},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3661927,"resolution":"9","location":"assets","locale":"","width":1273,"height":594}},"screenshots":{"1":"The GridXFlex Forms dashboard listing all forms and their status.","2":"Forms Add\/Edit Page : Header Settings.","3":"Forms Add\/Edit Page : Fields.","4":"Forms Add\/Edit Page : Design Settings.","5":"Forms Add\/Edit Page : Spam Protection Settings.","6":"Forms Add\/Edit Page : Submission Settings.","7":"Forms Add\/Edit Page : Revision History.","8":"The submissions dashboard with read\/unread status and CSV export.","9":"Forms Page : All Submissions Page with form filter.","10":"The General Settings with sitewide defaults.","11":"The Block to Find in pages \/ post to show a form \/ or use shortcode","12":"Select Your Form from All Forms","13":"Frontend Demo Form , After Submission the success message!"}},"plugin_section":[],"plugin_tags":[358,2253,148076,595,2419],"plugin_category":[38],"plugin_contributors":[260216],"plugin_business_model":[],"class_list":["post-353162","plugin","type-plugin","status-publish","hentry","plugin_tags-contact-form","plugin_tags-form-builder","plugin_tags-gutenberg","plugin_tags-recaptcha","plugin_tags-spam-protection","plugin_category-authentication","plugin_contributors-gridxflex","plugin_committers-gridxflex"],"banners":{"banner":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/banner-772x250.png?rev=3661927","banner_2x":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/banner-1544x500.png?rev=3661927","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/icon-128x128.png?rev=3661927","icon_2x":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/icon-256x256.png?rev=3661927","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-1.png?rev=3661927","caption":"The GridXFlex Forms dashboard listing all forms and their status."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-2.png?rev=3661927","caption":"Forms Add\/Edit Page : Header Settings."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-3.png?rev=3661927","caption":"Forms Add\/Edit Page : Fields."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-4.png?rev=3661927","caption":"Forms Add\/Edit Page : Design Settings."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-5.png?rev=3661927","caption":"Forms Add\/Edit Page : Spam Protection Settings."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-6.png?rev=3661927","caption":"Forms Add\/Edit Page : Submission Settings."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-7.png?rev=3661927","caption":"Forms Add\/Edit Page : Revision History."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-8.png?rev=3661927","caption":"The submissions dashboard with read\/unread status and CSV export."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-9.png?rev=3661927","caption":"Forms Page : All Submissions Page with form filter."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-10.png?rev=3661927","caption":"The General Settings with sitewide defaults."},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-11.png?rev=3661927","caption":"The Block to Find in pages \/ post to show a form \/ or use shortcode"},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-12.png?rev=3661927","caption":"Select Your Form from All Forms"},{"src":"https:\/\/ps.w.org\/gridxflex-contact-forms\/assets\/screenshot-13.png?rev=3661927","caption":"Frontend Demo Form , After Submission the success message!"}],"raw_content":"<!--section=description-->\n<p>GridXFlex Contact Forms is a lightweight contact form builder for WordPress \u2014 no third-party services required. Build unlimited forms, each with its own fields, design, and settings, and insert them anywhere with the \"GridXFlex Contact Form\" block or a simple shortcode.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Unlimited forms, each with its own fields, design, and settings<\/li>\n<li>Duplicate an existing form with one click from the Forms list \u2014 copies its fields, design, and settings<\/li>\n<li>Search\/filter the Forms list by title<\/li>\n<li>Insert via shortcode <code>[gridxflex_contact_form id=\"12\"]<\/code> or the \"GridXFlex Contact Form\" block \u2014 with a one-click copy-to-clipboard button next to the shortcode, in both the Forms list and the form editor header<\/li>\n<li>Fields: Name (single or split first\/last), Email (real-time validation), Subject (text or dropdown), Message (adjustable rows, optional character limit); every field also supports its own placeholder text, help text, and default value<\/li>\n<li>Full visual design controls per form: typography, colors, borders, spacing, shadows, container layout, and button styling<\/li>\n<li>Responsive <strong>Design \u2192 Responsive Spacing<\/strong> panel: independent per-side (top\/right\/bottom\/left) padding and margin for Mobile, Tablet, and Large Devices, plus a container background color picker \u2014 every value defaults to 0px until you set it<\/li>\n<li><strong>Revision history<\/strong>: every save snapshots the form's previous state, viewable and restorable from the editor's History tab \u2014 restoring itself creates a new revision, so it's always undo-able<\/li>\n<li>A dedicated <strong>All Submissions<\/strong> page lists submissions across every form, with a form picker, independent of the per-form editor<\/li>\n<li>Responsive field layout with configurable field widths (100% \/ 50% \/ 33%)<\/li>\n<li>Configurable required-field indicator: asterisk, \"(Required)\" text, or hidden<\/li>\n<li>Honeypot spam protection, enabled by default<\/li>\n<li>Optional Google reCAPTCHA v2 or v3<\/li>\n<li>Submissions dashboard: read\/unread status (toggle any submission between Mark Read \/ Mark Unread), an unread-count badge shown per form in the Forms list, detail view, delete, CSV export<\/li>\n<li>Email notifications to the site admin, with optional auto-reply to the visitor \u2014 sent via <code>wp_mail()<\/code> with a proper From header and failure logging<\/li>\n<li>Optional SMTP sending (e.g. Gmail) as a backup mail transport: one shared account configured once in Settings, with a per-form switch (Submission tab) to route that form's emails through it<\/li>\n<li>Accessible markup: keyboard navigation, screen-reader-friendly labels, inline error messages<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin can optionally connect to Google reCAPTCHA (v2 or v3) for spam protection on individual forms. It is disabled by default; a site owner must explicitly enable it site-wide (GridXFlex Forms \u2192 Settings) and then switch it on per form (Spam Protection tab) before any data is sent to Google.<\/p>\n\n<p>When enabled for a given form, on every submission of that form the visitor's browser loads a script from Google (<code>https:\/\/www.google.com\/recaptcha\/api.js<\/code>), and the plugin's server sends the reCAPTCHA response token and the visitor's IP address to Google's verification endpoint (<code>https:\/\/www.google.com\/recaptcha\/api\/siteverify<\/code>) to confirm the submission is not automated.<\/p>\n\n<p>This service is provided by Google: <a href=\"https:\/\/policies.google.com\/terms\">Terms of Service<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>gridxflex-contact-forms<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>A starter \"Contact Us\" form is created automatically. Go to <strong>GridXFlex Forms<\/strong> in the admin menu to edit it or add new ones.<\/li>\n<li>Insert a form using its shortcode (shown on the Forms list and inside the form editor) or the \"GridXFlex Contact Form\" block.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20store%20submissions%20in%20my%20database%3F\"><h3>Does this plugin store submissions in my database?<\/h3><\/dt>\n<dd><p>Yes, by default. Disable database storage per-form in the form's Submission tab if you only want email notifications.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20recaptcha%20keys%3F\"><h3>Can I use my own reCAPTCHA keys?<\/h3><\/dt>\n<dd><p>Yes \u2014 enable reCAPTCHA in a form's Spam Protection tab and enter your site key and secret key.<\/p><\/dd>\n<dt id=\"my%20contact%20form%20emails%20aren%27t%20arriving%20%E2%80%94%20can%20i%20use%20smtp%20instead%3F\"><h3>My contact form emails aren't arriving \u2014 can I use SMTP instead?<\/h3><\/dt>\n<dd><p>Yes. Go to GridXFlex Forms \u2192 Settings \u2192 SMTP \/ Gmail, enable it, and fill in your SMTP host, port, encryption, and credentials (for Gmail, use a 16-character App Password, not your normal password \u2014 the \"Fill in Gmail defaults\" button prefills the host\/port\/encryption for you). Then, per form, turn on \"Send this form's emails via SMTP\" in that form's Submission tab. Forms that leave the switch off keep using WordPress's default mail transport.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20remove%20the%20plugin%3F\"><h3>What happens to my data if I remove the plugin?<\/h3><\/dt>\n<dd><p>Deactivating the plugin never touches your data. Deleting it does not run any cleanup \u2014 export what you need first (CSV export is in the Submissions tab), then remove the plugin's two database tables manually if desired.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20transmit%20any%20data%20externally%3F\"><h3>Does this plugin transmit any data externally?<\/h3><\/dt>\n<dd><p>No, unless you enable the optional Google reCAPTCHA feature (verification requests go to Google), or you enable and opt a form into the optional SMTP feature (that form's emails are sent through the SMTP server you configure, e.g. Gmail, instead of your host's default mail transport).<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20keep%20a%20history%20of%20changes%20to%20a%20form%3F\"><h3>Does the plugin keep a history of changes to a form?<\/h3><\/dt>\n<dd><p>Yes. Every time you save a form, its previous state is kept as a revision, visible on the editor's History tab. Restoring an older revision saves the current version as a new revision first, so restoring is itself undo-able. The most recent 20 revisions per form are kept.<\/p><\/dd>\n<dt id=\"why%20did%20my%20email%20notifications%20stop%20arriving%3F\"><h3>Why did my email notifications stop arriving?<\/h3><\/dt>\n<dd><p>Check the form's Submission tab settings are correct, and confirm your host's outbound mail is configured (an SMTP plugin is often needed \u2014 <code>wp_mail()<\/code> alone relies on your server's mail transport). A failed send is logged so the underlying cause is easier to diagnose.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Unlimited forms, each with its own fields, design, and settings.<\/li>\n<li>Insert via shortcode <code>[gridxflex_contact_form id=\"12\"]<\/code> or the \"GridXFlex Contact Form\" block.<\/li>\n<li>Fields: Name (single or split first\/last), Email (real-time validation), Subject (text or dropdown), Message (adjustable rows, optional character limit).<\/li>\n<li>Full visual design controls per form: typography, colors, borders, spacing, shadows, container layout, and button styling.<\/li>\n<li>Design \u2192 Responsive Spacing: independent per-side (top\/right\/bottom\/left) padding and margin for Mobile, Tablet, and Large Devices, plus a container background color picker.<\/li>\n<li>Form revision history: every save snapshots the previous state, viewable and restorable from the editor's History tab. Restoring itself creates a new revision, so it's always undo-able.<\/li>\n<li>A dedicated \"All Submissions\" admin page listing submissions across every form via a form picker, independent of the per-form editor.<\/li>\n<li>Responsive field layout with configurable field widths (100% \/ 50% \/ 33%).<\/li>\n<li>Configurable required-field indicator: asterisk, \"(Required)\" text, or hidden.<\/li>\n<li>Honeypot spam protection, enabled by default; optional Google reCAPTCHA v2 or v3, configured once for the whole site on a dedicated <strong>Settings<\/strong> page \u2014 each form only gets an on\/off switch.<\/li>\n<li>A <strong>Settings<\/strong> page for site-wide reCAPTCHA keys and the default field\/design\/spam\/submission values every newly created form starts from.<\/li>\n<li>Submissions dashboard: read\/unread status, detail view, delete, CSV export.<\/li>\n<li>Email notifications to the site admin, with optional auto-reply to the visitor, sent via <code>wp_mail()<\/code> with an explicit From header and failure logging.<\/li>\n<li>Optional SMTP sending (e.g. Gmail) as a backup mail transport: one shared account on the Settings page (host, port, encryption, credentials, optional From override, Gmail-defaults shortcut) plus a per-form \"Send this form's emails via SMTP\" switch on the Submission tab.<\/li>\n<li>Accessible markup: keyboard navigation, screen-reader-friendly labels, inline error messages.<\/li>\n<li>Per-form design CSS is now output via wp_add_inline_style()\/wp_print_styles() instead of a raw, unenqueued <code>&lt;style&gt;<\/code> tag.<\/li>\n<\/ul>","raw_excerpt":"Simple, customizable, responsive contact form builder. Multiple forms, a Gutenberg block + shortcode, spam protection, and a submissions dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/353162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=353162"}],"author":[{"embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/gridxflex"}],"wp:attachment":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=353162"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=353162"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=353162"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=353162"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=353162"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=353162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}