=== Forming Forms – Form Builder for Block Editor ===
Contributors: fieldx, beautifulplugins
Tags: contact form, form builder, forms, block editor, custom form
Requires at least: 6.0
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

Build a contact form in the block editor from native form blocks. Spam protection, email notifications and saved entries — no shortcodes.

== Description ==

**Forming Forms – Form Builder for Block Editor** is a lightweight contact form and form builder plugin built entirely on the WordPress block editor. A form *is* a block: add the **Form** block to any post or page, nest the field blocks you need, and publish. No shortcodes, no embeds, no separate form builder screen to learn.

Every field — text, email, phone, select, checkbox — is a real WordPress block. That means you build your contact form the same way you build the rest of your page, with the same drag-and-drop, the same undo, and the same design controls you already use every day.

Submissions are validated on the server, checked for spam, emailed to you, and saved as entries in your WordPress admin.

= Build forms without shortcodes =

Most form builder plugins ask you to compose a form in a separate admin screen and then paste a shortcode into your page. Forming Forms skips that entirely. The form is built where it lives, and what you see in the editor is what your visitors get.

* Add the **Form** block anywhere — posts, pages, block themes, template parts, widgets.
* Nest field blocks inside it, reorder them by dragging.
* Style with the block editor's own spacing, typography, color and border controls.
* Reuse the same contact form across your site with a core synced pattern.

= Included form fields =

* **Text** — single-line input for names and short answers
* **Email** — with email format validation
* **Textarea** — multi-line messages
* **Number** — with optional min, max and step
* **Phone** — telephone input
* **URL** — website addresses
* **Select** — dropdown menu
* **Radio** — single choice from a list
* **Checkbox** — single consent box or multiple choices
* **Date** — date picker
* **Hidden** — pass a fixed value with the submission
* **Submit** — the send button

= Features =

* **Native block styling** — fields use the block editor's own spacing, typography, color and border controls. Nothing hand-rolled to relearn, and it inherits your theme.
* **Server-side validation** — the server rebuilds the form's field schema from the source post and validates every submission against it. The browser's field list is never trusted, so a tampered form cannot inject fields.
* **Spam protection, no CAPTCHA** — a honeypot field and a submission time-trap, both enabled by default. Your visitors never see a puzzle.
* **Email notifications** — send each submission to one or more recipients with a configurable subject, from name and from address.
* **Entry storage** — submissions are saved as a `forming_entry` custom post type, one meta value per field, so your form data stays in your own database.
* **Success behavior** — show an inline thank-you message or redirect to a URL after submit.
* **Accessible markup** — real labels, required-field indicators, and an ARIA live region for the response message.
* **Lightweight** — no jQuery, no page builder dependency, no external service. Assets load only on pages that contain a form.
* **Translation ready** — fully internationalized and ready for translation.
* **Developer friendly** — extend the field allowlist through the `forming_field_blocks` filter and hook `forming_submission_saved` to react to new entries.

= Typical uses =

A contact form, a quote request form, a support or feedback form, a newsletter signup, a job application, an RSVP or event registration form, a simple survey — anything you would otherwise build with a shortcode-based form builder.

= For developers =

Register your own block in the `forming` category and append its name to the allowlist:

`add_filter( 'forming_field_blocks', function ( $blocks ) {
    $blocks[] = 'my-plugin/field-rating';
    return $blocks;
} );`

React to a new submission:

`add_action( 'forming_submission_saved', function ( $entry_id, $data, $form_id ) {
    // $data is a name => value map of the validated submission.
}, 10, 3 );`

== Installation ==

= From your WordPress dashboard =

1. Go to **Plugins → Add New** and search for "Forming Forms".
2. Click **Install Now**, then **Activate**.
3. Edit any post or page, add the **Form** block, and insert the field blocks you need.
4. Open the Form block settings to set your recipients and success behavior, then publish.

= Manual installation =

1. Upload the plugin folder to `/wp-content/plugins/forming-form-builder`, or upload the ZIP through **Plugins → Add New → Upload Plugin**.
2. Activate the plugin from the **Plugins** screen.
3. Add the **Form** block to a post or page and build your form.

== Frequently Asked Questions ==

= How do I add a contact form to a page? =

Edit the page, add the **Form** block, and nest the field blocks you want inside it. The Form block starts with a name, email, message and submit button so you have a working contact form immediately. Set your notification recipients in the block sidebar and publish.

= Do I need a shortcode? =

No. The form is a block, so it lives directly in your post or page content. There is no shortcode to copy and no separate builder screen.

= Where are form submissions stored? =

Each submission is saved as a `forming_entry` custom post type with one meta value per field, so your data stays in your own WordPress database. A notification email is also sent to the recipients you configure.

= Does it send email notifications? =

Yes. Set one or more recipients, a subject, and a from name and address in the Form block settings. Notifications use `wp_mail()`, so any SMTP plugin you already use will handle delivery.

= How does the spam protection work? =

Two checks run on every submission, both on by default: a honeypot field that is hidden from people but tempting to bots, and a time-trap that rejects submissions completed implausibly fast. There is no CAPTCHA, so real visitors are never asked to solve anything.

= Does it work with the classic editor? =

No. Forming Forms is built exclusively for the WordPress block editor.

= Does it work with block themes and full site editing? =

Yes. The Form block can be placed in posts, pages, templates, template parts and widget areas, and it inherits your theme's styles through the block editor's own design controls.

= Can I reuse one form across several pages? =

Yes. Select the Form block and create a core synced pattern from it, then insert that pattern anywhere. Editing the pattern updates every page at once.

= Can I redirect visitors after they submit? =

Yes. In the Form block settings, choose to show a thank-you message or to redirect to any URL.

= Can developers add their own field types? =

Yes. Register a block in the `forming` category and append it to the allowlist with the `forming_field_blocks` filter. Use the `forming_submission_saved` action to react to new entries.

= Is it free? =

Yes. Forming Forms is free and licensed under the GPLv2 or later.

== Screenshots ==

1. Building a contact form in the block editor. The field blocks appear in the inserter on the left, the form renders live in the canvas, and the sidebar exposes per-field settings — label, name, placeholder, default value, help text, required and width.

== Changelog ==

= 1.0.0 =
* Initial release.

== Upgrade Notice ==

= 1.0.0 =
Initial release of Forming Forms.

== License ==

Forming Forms – Form Builder for Block Editor is distributed under the terms of the GNU General Public License v2 or later. See https://www.gnu.org/licenses/gpl-2.0.html for more details.
