=== 99Forms === Contributors: bodhiwp, salimshrestha Tags: form, contact form, gutenberg, block, form builder Requires at least: 6.8 Tested up to: 7.1 Requires PHP: 7.4 Stable tag: 1.0.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html A native Gutenberg block-based contact form builder. Build contact forms directly inside the block editor — no shortcodes, no iframes. == Description == 99Forms is a lightweight, Gutenberg-native contact form builder built for WordPress 6.8+. Every form field is a proper block — drag, drop, and configure directly inside the editor. No shortcodes, no page builders required. **Why 99Forms?** Most form plugins were built before the block editor existed. They bolt on Gutenberg support as an afterthought — a single shortcode block wrapping a separate form builder UI. 99Forms is built block-first from day one. **Available Field Blocks** * Text, Email, Password, Number, Hidden input * Textarea * Checkbox * Radio buttons * Select dropdown * Country picker (with phone code) * File upload * reCAPTCHA v2 **Form Features** * Honeypot spam protection (built-in, no config needed) * Google reCAPTCHA v2 support * Configurable success and error messages * Post-submission redirect URL * Hide form after successful submission * Server-side file upload validation (type + size) **Admin Features** * Submissions table with per-form filtering * Bulk delete submissions * Sortable columns (ID, date) **Design & Styling** * Label position: above or inline * Global field width control * Field spacing (margin) control * Label width control (for inline mode) * Padding control on the form wrapper **Pro Version (Coming Soon)** The free version covers all core form-building needs. A Pro version is planned with: * Email notifications (admin + user confirmation) * Conditional logic (show/hide fields based on values) * Multi-step forms * CSV export of submissions * File attachment in notification emails * Webhooks / Zapier integration == Installation == 1. Upload the `nnforms` folder to `/wp-content/plugins/`. 2. Activate the plugin from **Plugins → Installed Plugins**. 3. Open any page or post in the block editor. 4. Search for "Form" in the block inserter — add the **Form** block. 5. Add field blocks inside the Form block (Input, Textarea, Select, etc.). 6. Publish the page. **reCAPTCHA Setup (optional)** 1. Go to **99Forms → Settings**. 2. Enter your Google reCAPTCHA v2 Site Key and Secret Key. 3. Add the **reCAPTCHA** block inside your form. == Frequently Asked Questions == = Does this work with the classic editor? = No. 99Forms is built exclusively for the Gutenberg block editor (WordPress 6.8+). It has no shortcode or classic editor support by design. = Where are form submissions stored? = Submissions are stored in a custom database table (`wp_nnforms_submissions`) created on plugin activation. View them under **99Forms → Submissions** in the admin. = How do I filter submissions by form? = On the **Submissions** page, use the "Choose a form" dropdown at the top and click Filter. = Is the honeypot spam protection always active? = Honeypot is enabled by default on each form. You can disable it per-form from the Form block settings in the editor sidebar. = Can I have multiple forms on the same page? = Yes. Each Form block gets a unique ID automatically. = What file types are allowed for file upload fields? = Currently: JPEG, PNG, and PDF. Maximum file size is 2MB per upload. == Screenshots == 1. The Form block with field blocks inside the block editor. 2. Label position and field width controls in the block sidebar. 3. Submissions table filtered by a specific form. 4. Plugin settings page (reCAPTCHA keys). == Changelog == = 1.0.0 = * Initial release. * Form, Input, Textarea, Checkbox, Radio, Select, Country, File Upload, reCAPTCHA, and Submit blocks. * Submissions stored in custom DB table with admin list table. * Honeypot spam protection. * reCAPTCHA v2 support. * Per-form success/error messages and redirect URL. == Upgrade Notice == = 1.0.0 = Initial release. No upgrade steps required. == External Services == This plugin optionally uses Google reCAPTCHA v2 to protect forms from spam. When the reCAPTCHA field is added to a form, the Google reCAPTCHA script is loaded from Google's servers and the user's response token is sent to Google for verification on form submission. Service: Google reCAPTCHA Data sent: CAPTCHA response token, IP address (handled by Google) Condition: Only when a form with the reCAPTCHA block is submitted Terms of Service: https://policies.google.com/terms Privacy Policy: https://policies.google.com/privacy