Skip to content

webdesign29/inklura-forms

Repository files navigation

Inklura Forms

CI License: GPL-2.0-or-later PHP 7.4+ WordPress 5.8+

A small, dependency-free contact-form plugin for WordPress — drop a form on any page, store every submission, and get notified by email.

inklura-forms is part of the Inklura suite. It gives you a contact form via a shortcode (with a nonce + a hidden honeypot for spam), stores each submission as a per-blog post you can review in wp-admin, and emails a notification to whoever you choose — routed through bext managed email when the site is served behind bext, and falling back to wp_mail otherwise.

It works as a normal activatable plugin or as a must-use plugin, is multisite-safe, and requires no JavaScript on the front end.

Features

Module What it does
Shortcode [inklura_form] renders a contact form (name, email, subject, message) with a WordPress nonce + a hidden honeypot + a time-trap. [inklura_form id="123"] selects a specific form.
Custom fields Each form can define its own fields — text, email, tel, url, number, textarea, select, checkbox, radio — with label, placeholder, required flag, and options.
Validation Per-field server-side validation (format checks per type, required, in-list checks for select/radio/checkbox) with inline per-field error messages on re-render.
Forms An inklura_form post type for defining additional forms, each with its own recipients, success/error messages, time-trap, AJAX toggle, and auto-reply.
Submissions Every valid submission is stored as an inklura_submission post (per blog), reviewable on a read-only admin list with Form / Email / Date columns and a detail view. Export to CSV from the list (nonce + capability gated).
Email Notifies one or more recipients, and can send an auto-reply to the submitter. Uses bext managed send (POST /__bext/sdk/email/send with X-Bext-App-Id: <host>) when available, otherwise wp_mail. Reply-To is set to the submitter.
Anti-spam A hidden honeypot plus a time-trap (reject submissions faster than N seconds after render).
AJAX Optional per-form AJAX submit as progressive enhancement — the form still works fully without JavaScript.
Settings A per-blog Settings page: default recipient, default success + error messages, time-trap, enable/disable email.
Multisite Per-blog submissions + settings, plus an optional network defaults page (Network Admin → Settings → Inklura Forms).
Auto-update Self-hosted updates for normal-plugin installs — "update available" + one-click update from a manifest (must-use installs update out-of-band).

Install

As a normal plugin

Put the repository in wp-content/plugins/inklura-forms/ and activate Inklura Forms — or upload the release ZIP from Plugins → Add New → Upload.

As a must-use plugin

Copy the folder into wp-content/mu-plugins/inklura-forms/ and load inklura-forms.php from an mu-plugin loader. (The self-updater disables itself for must-use installs.)

Usage

Add the shortcode to any page or post:

[inklura_form]

To create extra forms with their own fields, recipients, and messages, go to Inklura Forms → Add Form, configure it, then embed it:

[inklura_form id="123"]

Configure the defaults under Inklura Forms → Settings.

Defining fields

In the form editor, define fields one per line:

key | Label | type | required | option a, option b

Only key is required on a line. Types are text, email, tel, url, number, textarea, select, checkbox, radio. The 4th column makes the field required (required, yes, 1, true). The 5th column is a comma list of options for select, radio, and checkbox (a checkbox with no options is a single yes/no box). Lines starting with # are comments.

name    | Your name | text     | required
email   | Email     | email    | required
phone   | Phone     | tel
topic   | Topic     | select   | required | Sales, Support, Other
agree   | I agree   | checkbox | required
message | Message   | textarea | required

Leave the field box blank to use the default contact fields (name, email, subject, message).

Auto-reply, recipients, AJAX, time-trap

In the same form editor you can:

  • list multiple notification recipients (comma-separated);
  • set success and error messages;
  • enable an auto-reply to the submitter with a subject + body that support {site_name} and any {field_key} placeholder;
  • enable AJAX submit (progressive enhancement — works without JS too);
  • set a per-form time-trap in seconds.

Exporting submissions

On Inklura Forms → Submissions, an Export CSV button (admin-only, nonce + capability gated) downloads every submission as a UTF-8 CSV.

Spam handling

Each form ships a hidden honeypot field (inklura_hp) and a time-trap: a submission that arrives faster than the configured number of seconds after the form was rendered is rejected. Bots that trip either are silently accepted (no error shown) but nothing is stored or emailed. Every submission also carries a WordPress nonce.

Email via bext

When the site is behind a bext server, notifications go out through bext's managed email:

POST http://127.0.0.1/__bext/sdk/email/send
X-Bext-App-Id: <site host>
Content-Type: application/json

{ "to": ["you@example.com"], "subject": "...", "text": "...", "reply_to": "visitor@example.com" }

If bext isn't reachable or can't send, the plugin transparently falls back to wp_mail.

Testing

for t in tests/unit/*.php; do php "$t"; done   # WP-free unit tests
bin/build-zip.sh /tmp/inklura-forms.zip        # build the installable ZIP

CI lints on PHP 7.4 / 8.1 / 8.3 and runs the unit tests.

Sponsors

Inklura Forms is built and maintained with the support of:

  • webdesign29 — web agency (Brest, France).
  • Inklura — WordPress-compatible CMS & hosting.

Interested in sponsoring? Use the Sponsor button or open an issue.

License

GPL-2.0-or-later — see LICENSE.

About

Inklura Forms — forms + submissions for WordPress with bext email delivery. Multisite + self-updating.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors